赞
踩
Obfuscator-llvm的最新版本是4.0 github地址是https://github.com/obfuscator-llvm/obfuscator.git 。Linux系统安装环境还是比较容易的,这个就不介绍了。直接开始编译Obfuscator-LLVM。
1.下载ollvm源码
git clone -b llvm-4.0 https://github.com/obfuscator-llvm/obfuscator.git
2.因为4.0版本没有开放字符串混淆功能,所以需要借助我们优秀的上海交大的孤挺花项目。
项目地址为 https://github.com/GoSSIP-SJTU/Armariris
字符串混淆的部分主要由字符串加密的Pass完成,所以我们把字符串混淆的功能加入ollvm中。
将Armariris项目中StringObfuscation.cpp文件复制到obfuscator/lib/Transforms/Obfuscator目录下
将Armariris项目中StringObfuscation.h文件复制到Obfuscator/include/llvm/Transforms/Obfuscator/目录下
修改lib/Transform/Obfuscation目录下的CMakeLists.txt文件,将StringObfuscation.cpp添加到编译库中。
然后修改Transform/IPO下的PassManagerBuilder.cpp文件,添加字符串加密的编译代码。具体代码如下:
添加引用 #include "llvm/Transforms/Obfuscation/StringObfuscation.h"。
插入函数声明,即编译时的编译参数-mllvm -sobf
static cl::opt<:string> Seed("seed", cl::init(""),
cl::desc("seed for the random"));
static cl::opt StringObf("sobf", cl::init(false),
cl::desc("Enable the string obfuscation"));
在PassManagerBuilder()构造函数中添加随机数因子的初始化
if(!Seed.empty()) {
llvm::cryptoutils->prng_seed(Seed.c_str());
}
添加pss到 PassManagerBuilder::populateModulePassManager中
MPM.add(createStringObfuscation(StringObf));
然后保存修改。
3.进入源码目录
cd obfuscator
4.建立build文件夹
mkdir build
5.进入build文件夹
cd build
6.配置cmake编译参数
cmake -DCMAKE_BUILD_TYPE=Release ../obfuscator/
这一步如果出现以下错误
CMake Error at cmake/modules/AddLLVM.cmake:1163 (add_custom_target):
可以这样解决(应该是单元测试的问题,这样关闭单元测试就好了):
cmake -DCMAKE_BUILD_TYPE=Release -DLLVM_INCLUDE_TESTS=OFF ../obfuscator/
7.执行编译(-j7是开启7个线程编译,根据自己的cpu来吧,否则会很卡)
make -j7
8.然后进入漫长的等待
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。