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个(cryptonight
、cryptonight-lite
、cryptonight-heavy
)到新版本的19个(cn/r
、cn/2
、cn/1
、cn/0
、cn/double
、cn/half
、cn/fast
、cn/rwz
、cn/zls
、cn/xao
、cn/rto
、cn/gpu
、cn-lite/1
、cn-heavy/xhv
、cn-heavy/tube
、cn-heavy/0
、cn-pico
、rx/wow
、rx/loki
)可以看出开发人员对算法很注重。
瞎扯淡
最后想请教各位大佬一个问题,最近在搞某软件的破解,破解工具是完成了,但是最核心的算法最终没有搞出来,只能分析其他大佬的破解工具,在使用IDA分析其他大佬破解工具的时候,找到了对应的算法,怎么才能把具体的算法扣出来,由于目前算法这块还是没有分析透彻,所以自己没有办法通过代码实现相应算法。