windows上編譯ollvm4.0並整合到ndk中
阿新 • • 發佈:2022-05-27
說一下我的艱辛歷程,整整編譯了三四天,要麼編譯出來不能用,要麼編譯不了。。。。。。
工具
- mingw64:gcc編譯器的windows版本,即可以在windows平臺上使用gcc編譯器。
- 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
- 最後一步將mingw32-make.exe檔案更名為make(網上後很多人最後編譯直接使用make命令,實際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 的工程檔案 make //即開始編譯(1個小時左右)
將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