OLLVM代码混淆移植与使用(续)

现状

随着时间时间推移,类似库都基本不维护了,毕竟LLVM新版本改动多还好说,再多只要看看关键位置就大差不差知道怎么改怎么兼容,最难的就是编译,每次编译调试不知不觉没干啥就能耗人一天,另外就是以前的人现在都不知道还在不在业内,回归正题,其实修改的地方并不多,下面我就整理了一下关键位置,主要就是类型和调用顺序变了一下,了解以后去修改类似的项目也是手到擒来。

关键修改

9.0以后的修改

这里类型写法更加标准一步一步转

image.png

这里是9以后不在调用这个方法了,导致fla不生效,也可以在Flattening.cpp里面修改添加
image.png

10.0以后的修改

首先Obfuscation/CMakeLists.txtadd_llvm_libraryadd_llvm_component_library

这里是LoadInst初始化多加了个类型参数,类似地方全改一遍

image.png

image.png

这里传入类型修改一下
image.png

再然后CryptoUtils.h里有一些宏定义是非常短的名称代表方法,这里再全局里容易有歧义,可以批量移到CryptoUtils.cpp里,因为只有这个类再用,其他地方也没有用这些短名称的宏方法
image.png

其他地方和原来一样不变。

11.0以后的修改

这里开始严格区分一元运算符和二元运算符了


image.png

image.png

XCode12 以后

首先编译要多加几个项目,根据自己需要可以多填几个,LLVM-10以后llvm目录向内放了一层

cd build
cmake -DCMAKE_BUILD_TYPE=Release -DLLVM_CREATE_XCODE_TOOLCHAIN=ON -DLLVM_ENABLE_PROJECTS="clang;libcxx;libcxxabi" ../obfuscator/llvm
make -j7
sudo make install-xcode-toolchain
mv /usr/local/Toolchains  /Library/Developer/

然后在Build Settings里找到C++ Language DialectC++ Standard Library使用默认是为了直接走编译链构建的版本,如果你还加了其他的也需要注意一下别的确保都走你编译的版本

build3.png

Android Studio4.x以后

NDK都改为了默认CMake项目,直接复制Android/sdk/ndk/xx.x.xxxxxx文件夹修改一下名称,替换bin和lib64

在build.gradle里添加个人修改的版本

android {
    ndkVersion "major.minor.build" // e.g.,  ndkVersion "21.3.6528147"
}
WX20211228-021611@2x.png

推荐阅读更多精彩内容