windows上编译ollvm4.0并集成到ndk中

说一下我的艰辛历程,整整编译了三四天,要么编译出来不能用,要么编译不了。。。。。。

工具

  • mingw64:gcc编译器的windows版本
  • ollvm4.0:官方版
  • ndk:android studio中下载的ndk 16.1.4479499

设置环境

  • 解压后设置环境变量

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

posted @ 2022-05-27 15:05  怎么可以吃突突  阅读(993)  评论(0编辑  收藏  举报