windows上编译ollvm4.0并集成到ndk中
说一下我的艰辛历程,整整编译了三四天,要么编译出来不能用,要么编译不了。。。。。。
工具#
- mingw64:gcc编译器的windows版本
- ollvm4.0:官方版
- ndk:android studio中下载的ndk 16.1.4479499
设置环境#
- 下载mingw64编译后的压缩包,下载链接:https://sourceforge.net/projects/mingw-w64/files/mingw-w64/
- 解压后设置环境变量
mingw64的bin目录中包含了gcc.exe,mingw32-make.exe等文件,命令行gcc --version
查看gcc的版本,验证环境变量是否设置完成。
- 最后一步将mingw32-make.exe文件更名为make(网上后很多人最后编译直接使用make命令,实际make命令就是这个文件,也可以不用更名直接使用migw32-make命令)
编译ollvm4.0#
ollvm4.0下载链接:https://github.com/obfuscator-llvm/obfuscator
mkdir build //在ollvm解压的后的文件夹中生成build文件夹
cd build //进入到build文件夹中
cmake -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=Release ../ //生成MinGW 的makefile工程文件
make //即开始编译(1个小时左右)
编译时可能会出现如下报错,将Expected<std::vector<char>> readMem(char *Dst, JITTargetAddress Src, uint64_t Size)
修改为Expected<std::vector<uint8_t>> readMem(char *Dst, JITTargetAddress Src, uint64_t Size)
error: could not convert '((llvm::orc::remote::OrcRemoteTargetClient<ChannelT>*)this)->callB<llvm::orc::remote::OrcRemoteTargetRPCAPI::ReadMem>(Src, Size)' from 'Expected<vector<unsigned char,allocator<unsigned char>>>' to 'Expected<vector<char,allocator<char>>>'
将ollvm4.0集成到android studio的ndk中#
- 实现备份对应版本的ndk文件夹
- 将编译后的build\bin文件夹中的
clang.exe clang++.exe clang-format.exe
复制到ndk的toolchains\llvm\prebuilt\windows-x86_64\bin文件夹下,覆盖目标文件 - 将编译后的build\lib\clang\4.0.1\include文件夹中的
__stddef_max_align_t.h stddef.h stdarg.h float.h
复制到ndk的sysroot\usr\include文件夹下
使用ollvm对程序代码进行混淆#
在android studio的local.properties文件中设置ndk 的路径
然后在build.gradle中设置-mllvm -fla -mllvm -sub -mllvm -bcf
,分别开启控制流平坦化,指令替换,伪造虚假执行流。
需要开启相应混淆功能的函数需要如下进行声明,例如函数开启控制流平坦化混淆。
开启混淆后函数的CFG控制流程图如下
参考链接:
https://www.cnblogs.com/zhangshenghui/p/12001739.html
https://blog.csdn.net/qq_42237638/article/details/104905061
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】