win10 OLLVM编译环境搭建 并且实现Android jni 字符串加密
win10 OLLVM编译环境搭建 并且实现Android jni 字符串加密(以下操作限于win10并且存在Android的开发环境)
so库加密前和加密后对比
字符串加密前:
字符串加密后:
准备工作
1.找到Android SDK目录配置好cmake环境变量 E:\AndroidSDK\cmake\3.18.1(E:\AndroidSDK为 Android SDK目录地址)。
2. 下载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 这个是编译成功的版本,其它还没有测试)。
1 在obfuscator-llvm-9.0.1同级目录打开win10的cmd指令创建一个build目录(obfuscator-llvm-9.0.1和build在同一级目录) 3 mkdir build (也可以手动创建目录) 5 cd build (打开创建的目录) 7 接下来开始编译代码比较耗时需要耐心等待下。 8 cmake -G “MinGW Makefiles” -DCMAKE_BUILD_TYPE=Release -DLLVM_INCLUDE_TESTS=OFF ../obfuscator-llvm-9.0.1/ 10 mingw32-make.exe -j12
将编译成功后的ollvm集成到android studio的ndk中
- 以ndk 21.1.6352462版本举例,首先备份一下以防万一出错好还原,以下步骤复制到21.1.6352462的目录
- 将编译后的build\bin文件夹中的
clang.exe clang++.exe clang-format.exe
复制到ndk的21.1.6352462\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文件夹下
使用ollvm对程序代码进行混淆
在android studio的local.properties文件中设置ndk 的路径
然后再CMakeLists.txt中添加:set(CMAKE_CXX_FLAGS "-mllvm -fla -mllvm -sub -mllvm -bcf -mllvm -sobf")
-mllvm -fla:fla混淆 -mllvm -sub: 启用instructions substitution -mllvm -sub_loop=3: 对每个函数混淆3次,默认1次 -mllvm -bcf: 启用 bogus control flow -mllvm -bcf_loop=3: 对一个函数混淆3次,默认1次 -mllvm -bcf_prob=40: 代码块被混淆的概率是40%,默认30% -mllvm -sobf:加密字符
到此Android Studio的编译环境就配置完成,之后的so文件字符串就能加密了。