准备工作
1.找到Android SDK目录配置好cmake环境变量 E:\AndroidSDK\cmake\3.18.1(E:\AndroidSDK为 Android SDK目录地址)。
- 下载llvm-mingw编译环境(gcc编译器的windows版本,即可以在windows平台上使用gcc编译器),下载地址:https://github.com/mstorsjo/llvm-mingw/releases 选择最新版本,根据系统环境不一样选择自己需要的版本,我电脑是win10下载的是llvm-mingw-20230130-msvcrt-x86_64.zip,下载完后进入bin目录配置好环境变量。
3.编译代码下载,下载地址:https://github.com/heroims/obfuscator/tree/llvm-9.0.1 下载llvm编译的代码(分支9.0.1 这个是编译成功的版本,其它还没有测试)。
最后执行命令
mkdir build
cd build
cmake.exe -G “MinGW Makefiles” -DCMAKE_BUILD_TYPE=Release …
mingw32=make
mingw32-make install
注意这里安装完成了,会在你的C:\Program Files (x86)\LLVM这个目录下去找
bin文件夹中的clang.exe clang++.exe clang-format.exe 复制到ndk你的ndk目录下的\toolchains\llvm\prebuilt\windows-x86_64\bin文件夹下,覆盖目标文件
将编译后的build\lib\clang\9.0.1\include文件夹中的__stddef_max_align_t.h stddef.h stdarg.h float.h 复制到ndk的21.1.6352462\toolchains\llvm\prebuilt\windows-x86_64\sysroot\usr\include文件夹下
最后在你项目的CMakeLists.txt文件里面添加如下代码
set(CMAKE_C_FLAGS_RELEASE “KaTeX parse error: Double subscript at position 9: {CMAKE_C_̲FLAGS_RELEASE} …{CMAKE_CXX_FLAGS_RELEASE} -mllvm -fla -mllvm -split -mllvm -split_num=3 -mllvm -sub -mllvm -sub_loop=3 -mllvm -bcf -mllvm -bcf_prob=40 -mllvm -sobf”)
set(CMAKE_C_FLAGS_DEBUG “KaTeX parse error: Double subscript at position 9: {CMAKE_C_̲FLAGS_DEBUG} -m…{CMAKE_CXX_FLAGS_DEBUG} -mllvm -fla -mllvm -split -mllvm -split_num=3 -mllvm -sub -mllvm -sub_loop=3 -mllvm -bcf -mllvm -bcf_prob=40 -mllvm -sobf”)
上面的代码解释如下
只使用控制流扁平化: -mllvm -fla
只使用指令替换: -mllvm -sub
只使用虚假控制流程: -mllvm -bcf
-mllvm -fla:激活控制流扁平化
-mllvm -split:激活基本块分割。在一起使用时改善展平。
-mllvm -split_num=3:如果激活了传递,则在每个基本块上应用3次。默认值:1
-mllvm -sub:激活指令替换
-mllvm -sub_loop=3:如果激活了传递,则在函数上应用3次。默认值:1
-mllvm -bcf:激活虚假控制流程
-mllvm -bcf_loop=3:如果激活了传递,则在函数上应用3次。默认值:1
-mllvm -bcf_prob=40:如果激活了传递,基本块将以40%的概率进行模糊处理。默认值:30
-mllvm -sobf 开启字符串混淆
-mllvm -seed=0xdeadbeaf 指定随机数种子生成器
注意,添加字符串混淆有的情况会崩溃,如果发现崩溃,对混淆要求不严格的话,可以去掉字符串混淆
参考文章
https://www.cnblogs.com/blogzhangwei/p/17218016.html