xmrig v3.0.0源码修改

xmrig v3.0.0源码修改

起因

前段时间xmrig的beta版本狂升,直接到v2.99.x了,就感觉xmrig的master可能要版本大更新了,今天去github看到xmrig的master版本更新到了v3.0.0了,便对新版本的源码进行修改。

准备工作

首次编译

由于我使用的是windows 10下面的Ubuntu 18.04,所有根据官方github提供的编译命令,如下所示,各位表哥根据自己的实际情况在xmrig编译命令中选用合适的命令。

sudo apt-get install git build-essential cmake libuv1-dev libmicrohttpd-dev libssl-dev libhwloc-dev
git clone https://github.com/xmrig/xmrig.git
cd xmrig
mkdir build
cd build
cmake ..
make

源码修改

修改抽水地址

在doc/api/1/config.json 20-37行配置了抽水地址,如下所示,通过替换user的参数值可以修改抽水地址,这里推荐把url也修改为自己使用的矿池地址。

"pools": [
    {
        "url": "pool.monero.hashvault.pro:3333",
        "user": "48edfHu7V9Z84YzzMa6fUueoELZ9ZRXq9VetWzYGzKt52XU5xvqgzYnDK9URnRoJMk1j8nLwEVsaSWJ4fhdUyZijBGUicoD",
        "pass": "x",
        "keepalive": false,
        "nicehash": false,
        "variant": -1
    },
    {
        "url": "pool.supportxmr.com:3333",
        "user": "48edfHu7V9Z84YzzMa6fUueoELZ9ZRXq9VetWzYGzKt52XU5xvqgzYnDK9URnRoJMk1j8nLwEVsaSWJ4fhdUyZijBGUicoD",
        "pass": "x",
        "keepalive": false,
        "nicehash": false,
        "variant": -1
    }
]

修改抽水率

在src/donate.h 46-47行配置了抽水率和最小抽水率,如下所示,通过修改变量kDefaultDonateLevel控制默认抽水率,通过修改变量kMinimumDonateLevel控制最小抽水率。

constexpr const int kDefaultDonateLevel = 5;
constexpr const int kMinimumDonateLevel = 1;

内置参数配置

在src/base/kernel/config/BaseTransform.cpp 70-85行对传入参数进行配置,如下所示,大家通过参数配置的钱包地址等等都是在这个类开始使用的。

while (1) {
    key = getopt_long(argc, argv, short_options, options, nullptr);
    if (key < 0) {
        break;
    }

    if (key == IConfig::ConfigKey) {
        chain.add(std::move(doc));
        chain.addFile(optarg);

        doc = Document(kObjectType);
    }
    else {
        transform.transform(doc, key, optarg);
    }
}

在上述代码前我们可以通过添加代码使配置参数内置,如下所示。

transform.transform(doc, 97,"cn/r"); //配置算法类型
transform.transform(doc, 111, "test.com:8888"); //配置矿池地址
transform.transform(doc, 117,"test"); //配置钱包地址
transform.transform(doc, 112,"test"); //矿工分组
chain.add(std::move(doc));
return ;

以配置算法类型为例子进行说明,正常情况下使用-a cn/r来配置,在代码使用transform.transform方法来配置,transform.transform方法的第一个参数为固定变量doc,transform.transform方法的第二个参数为参数的ascii码,transform.transform方法的第三个参数为参数的值。

总结

总体来说新版本更新最大的地方是算法,从老版本的3个(cryptonightcryptonight-litecryptonight-heavy)到新版本的19个(cn/rcn/2cn/1cn/0cn/doublecn/halfcn/fastcn/rwzcn/zlscn/xaocn/rtocn/gpucn-lite/1cn-heavy/xhvcn-heavy/tubecn-heavy/0cn-picorx/wowrx/loki)可以看出开发人员对算法很注重。

瞎扯淡

最后想请教各位大佬一个问题,最近在搞某软件的破解,破解工具是完成了,但是最核心的算法最终没有搞出来,只能分析其他大佬的破解工具,在使用IDA分析其他大佬破解工具的时候,找到了对应的算法,怎么才能把具体的算法扣出来,由于目前算法这块还是没有分析透彻,所以自己没有办法通过代码实现相应算法。

1 Like

太水了

你还是不懂我文章的重点,重点不是文章的内容,是瞎扯淡环节的提问。

水就水image

image