如何为Android NDK启用OLLVM等混淆技术?
Android NDK 集成 OLLVM 混淆的简便实现步骤
预编译OLLVM工具链
- 拉取OLLVM混淆分支的源码,新建build目录并进入
- 执行cmake配置交叉编译环境,替换成你本地的NDK路径、目标ABI和Android版本:
cmake -DCMAKE_BUILD_TYPE=Release -DLLVM_TARGETS_TO_BUILD="ARM;AArch64" -DANDROID_NDK=/your/ndk/path -DCMAKE_TOOLCHAIN_FILE=/your/ndk/path/build/cmake/android.toolchain.cmake -DANDROID_ABI=arm64-v8a -DANDROID_PLATFORM=android-21 .. - 用
make -j$(nproc)编译,完成后在build/bin下能拿到针对Android的clang工具链
修改项目CMakeLists.txt
直接替换默认编译器为OLLVM的,再加上混淆参数:set(CMAKE_C_COMPILER "/path/to/ollvm/build/bin/clang") set(CMAKE_CXX_COMPILER "/path/to/ollvm/build/bin/clang++") # 开启三种核心混淆:控制流平坦化、指令替换、虚假控制流 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mllvm -fla -mllvm -sub -mllvm -bcf") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mllvm -fla -mllvm -sub -mllvm -bcf")注:不同OLLVM版本参数可能有变化,比如有些旧版本用
-enable-bcf,自己对应调整就行偷懒替代方案(不想编译的话)
找第三方打包好的Android版OLLVM预编译包,解压后备份NDK原clang,把OLLVM的clang/clang++复制到NDK的toolchains/llvm/prebuilt/[你的主机架构]/bin目录下,之后直接在CMake或gradle里加混淆参数就行,省掉编译步骤验证混淆效果
编译出so后,用IDA/Ghidra反编译看控制流,或者用objdump -d libxxx.so看汇编,要是出现大量跳转、冗余分支,就说明混淆生效了
内容的提问来源于stack exchange,提问作者tart
相关产品推荐
相关产品推荐

