1. 程式人生 > 其它 >windows上編譯ollvm4.0並整合到ndk中

windows上編譯ollvm4.0並整合到ndk中

說一下我的艱辛歷程,整整編譯了三四天,要麼編譯出來不能用,要麼編譯不了。。。。。。

工具

  • mingw64:gcc編譯器的windows版本,即可以在windows平臺上使用gcc編譯器。
  • 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命令就是這個檔案)

編譯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