VisualStudio配置
1,正常配置C++桌面环境
2,在单个组件中选择用于Windows得C++ Cmake工具
下载OLLVM13.x
https://github.com/heroims/obfuscator/tree/llvm-13.x
解压后进入文件夹,命令行输入
cmake -G “Visual Studio 17 2022” -DLLVM_ENABLE_PROJECTS=“clang” -DCMAKE_BUILD_TYPE=Release -DLLVM_INCLUDE_TESTS=OFF -DLLVM_ENABLE_NEW_PASS_MANAGER=OFF ./llvm
编译
在文件夹右键 使用VS 2022打开项目
找到llvm项目, 双击LLVM.sln ,打开项目直接编译即可
编译完成后 在Release/bin文件夹下就生成了clang.exe
将编译好的 clang、clang-format、clang++ 这三个文件复制到 AndroidStudio使用的NDK目录 …/toolchains/llvm/prebuilt/darwin-x86_64/bin文件夹下,存在同名文件需要替换掉。 (替换之前别忘了备份原文件哦)
需要注意对应的clang版本 需要找比较接近的ndk版本, clang 13.0.1 接近的ndk版本是 23.2.8568313 (clang 版本是12.0.9)
如果报错 找不到lib/clang
1、修改D:\androidSdk\ndk\23.2.8568313\toolchains\llvm\prebuilt\windows-x86_64\lib64\clang 下 文件夹版本将12.0.9 修改为13.0.1
2、复制lib64 目录下的clang 到 lib 目录下。
混淆
添加混淆指令
. -mllvm -fla:控制流扁平化
. -mllvm -sub:指令替换
. -mllvm -bcf:虚假控制流程
. -mllvm -sobf: 字符串加密
把参数加入到 CMakeLists.txt 里面
#设置llvm release模式混淆编译
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -mllvm -sub -mllvm -sobf -mllvm -fla ")
set(CMAKE_CXX_FLAGS_RELEASE “${CMAKE_CXX_FLAGS_RELEASE} -mllvm -sub -mllvm -sobf -mllvm -fla”)
#设置llvm debug模式混淆编译
set(CMAKE_C_FLAGS_DEBUG “${CMAKE_C_FLAGS_DEBUG} -mllvm -sub -mllvm -sobf -mllvm -fla” )
set(CMAKE_CXX_FLAGS_DEBUG “${CMAKE_CXX_FLAGS_DEBUG} -mllvm -sub -mllvm -sobf -mllvm -fla” )
对指定函数混淆,放在指定函数前面
__attribute((annotate(“bcf”)))
__attribute((annotate(“fla”)))
__attribute((annotate(“sub”)))
__attribute((annotate(“split”)))
__attribute((annotate(“sobf”)))
效果
整体混淆效果:代码较少的情况下效果不是很明显。
单独对函数进行混淆,效果很明显。