Obfuscator-LLVM4.0编译和Android NDK配置(Linux 环境)

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<std::string> Seed("seed", cl::init(""),
                           cl::desc("seed for the random"));

static cl::opt<bool> 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.然后进入漫长的等待

发布了63 篇原创文章 · 获赞 41 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/MarketAndTechnology/article/details/81077082