心血来潮,想看一下trojan的源码,于是在github上拉了一份下来,准备先编译看看。
先直接cmake一下:
mkdir build
cd build
cmake ..
哦豁,需要boost库,下载一个下来,woc,怎么是源码。那接下来就要编译boost库了。
trojan依赖的是1.66.0的boost,那我下载对应版本的boost下来进行编译。
.\bootstrap.sh
.\b2 -j16 # 默认单线程编译,巨慢,一定要走多线程
.\b2 install -j16 # 执行install,之后会把boost对应的产物放置到C:/boost下
结果编译出错了,报错的内容是libs\python\src\exec.cpp(109): error C3861: “_Py_fopen”: 找不到标识符。
原因居然是我本地的python版本比较新,没有这个符号了。(我本地的python为3.10)
于是我直接使用1.83.0最新的boost进行编译,编译指令按照上面的就可以了。
接着继续编译trojan,发现还需要依赖一个openssl库,于是上网找了下,果不其然,又是下载到源码。
openssl安装比boost复杂多了,里面所有的东西都没有预置好,因此都需要自己来整。
- 安装perl,https://strawberryperl.com/releases.html,巨慢无比,挂hk的代理都下载得很慢。
- 安装nasm,并将对应二进制路径设置在环境变量中。
- 进行visual studio的命令行模式。
- 这一步比较少见,可以在菜单中找到visual studio 2019,然后里面有个x64命令行工具。
- 或者直接在这个路径看一下:C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build
环境准备好了,就可以开始编译了。
编译出来了一个动态库,于是需要在configure阶段设置对应参数:perl Configure # 直接让perl找本机的架构就好,如果要交叉编译的话可以看下openssl里面的readme nmake
接下来就会将对应的openssl的产物放置在C:\openssl下了。perl Configure no-shared no-asm --prefix=C:\openssl nmake nmake install
接下来配置trojan的cmake文件,我们在开头加入两行:
然后由于我们还没配置mysql相关环境,因此需要将48行的ENABLE_MYSQL置为false,接着就能顺利完成编译了。set(BOOST_ROOT "C:/Boost") set(OPENSSL_ROOT_DIR "C:/openssl")
所以说c++的基建真不行,别人python直接一个pip,js的话直接npm,rust还有cargo。然后c++要编译这又要编译那,非常麻烦。除非额外引入conan或者vcpkg这种包管理,但是现在很多工程都还没接入。怪不得现在别人都说rust比c++门槛要低= =