当前位置:   article > 正文

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

obfuscator-llvm

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目录下

a9bc7c09908c89f808abcd92218e7e66.png

将Armariris项目中StringObfuscation.h文件复制到Obfuscator/include/llvm/Transforms/Obfuscator/目录下

aaae54e903ae863ac876882681961a8f.png

修改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());

}

1cd6a4bcde43482bca3eb519295f083e.png

添加pss到 PassManagerBuilder::populateModulePassManager中

MPM.add(createStringObfuscation(StringObf));

d43a3cf613fd73aae730bd624e17193b.png

然后保存修改。

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.然后进入漫长的等待

17ae6ae45cb31accb6191c20f04cebd8.png

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/612842
推荐阅读
相关标签
  

闽ICP备14008679号