WIN10 x64搭建OLLVM4.0 android NDK 编译环境跨坑指南
本文參考大量相關博客,甄選出有用的文章,幫助大家遠離陷阱,節省時間。
目錄
- 平臺說明
- 環境準備
- 添加String混淆
- 集成到ndk編譯工具鏈
- 模式介紹與使用方法
- 編譯錯誤 Cannot open /dev/random
平臺說明
window10 64bit
android studio 3.6.1
環境準備
下載OLLVM4.0源碼
編譯請閱讀文章 記錄編譯OLLVM 4.0 Windows x64
注意事項:
1、如果系統是x64,選擇VS2017編譯的朋友注意了,我cmake之后并沒有生成 sln項目文件,所以考慮用mingw64編譯。
2、采用低版本的mingw64編譯,我使用的是 x86_64-5.4.0-release-posix-seh-rt_v5-rev0
,最新的8.1.0版本會產生如下編譯錯誤(char與unsigned char 轉換的問題):
3、編譯指令:
cd obfuscator-llvm-4.0 mkdir build cd build cmake -DCMAKE_BUILD_TYPE=Release ../ make -j8 # 注意make 由 C:\mingw64\bin\mingw32-make.exe 重命名為 C:\mingw64\bin\make.exe 所得添加String混淆
挺孤花– 由上海交通大學密碼與計算機安全實驗室維護的LLVM混淆框架,我們挑選其中的String混淆集成到OLLVM框架。
具體步驟參考文章 iOS混淆-ollvm中添加對String的混淆
集成到ndk編譯工具鏈
具體步驟參考文章 android studio 3.3.2 + ollvm 環境搭建
注意事項
1、高版本ndk-bundle無法使用,切換到ndk 14b 各個android ndk下載
2 、編譯時缺失頭文件根據則根據錯誤提示從 obfuscator-llvm-4.0\build\lib\clang\4.0.1\include 下選擇添加
3、將現有的ndk切換到 14b版本
在項目目錄下更改local.properties
模式介紹與使用方法
-
控制流扁平化
這個模式主要是把一些if-else語句,嵌套成do-while語句
-mllvm -fla:激活控制流扁平化
-mllvm -split:激活基本塊分割。在一起使用時改善展平。
-mllvm -split_num=3:如果激活了傳遞,則在每個基本塊上應用3次。默認值:1 -
指令替換
這個模式主要用功能上等效但更復雜的指令序列替換標準二元運算符(+ , – , & , | 和 ^)
-mllvm -sub:激活指令替換
-mllvm -sub_loop=3:如果激活了傳遞,則在函數上應用3次。默認值:1 -
虛假控制流程
這個模式主要嵌套幾層判斷邏輯,一個簡單的運算都會在外面包幾層if-else,所以這個模式加上編譯速度會慢很多因為要做幾層假的邏輯包裹真正有用的代碼。
另外說一下這個模式編譯的時候要浪費相當長時間包哪幾層不是鬧得!
-mllvm -bcf:激活虛假控制流程
-mllvm -bcf_loop=3:如果激活了傳遞,則在函數上應用3次。默認值:1
-mllvm -bcf_prob=40:如果激活了傳遞,基本塊將以40%的概率進行模糊處理。默認值:30 -
字符串混淆
-mllvm -sobf:編譯時候添加選項開啟字符串加密
-mllvm -seed=0xdeadbeaf:指定隨機數生成器種子流程
使用示例
android {defaultConfig { externalNativeBuild {cmake {cppFlags "-mllvm -fla -mllvm -sub -mllvm -bcf -mllvm -sobf -mllvm -seed=0xdeadbeaf"}} }具體參考 OLLVM代碼混淆移植與使用
編譯錯誤 Cannot open /dev/random
linux下才使用 " /dev/random"。解決方法參考文章 ollvm 使用——“Cannot open /dev/random”錯誤的解決方法
實測上述方案會導致clang++無法退出,修改如下(參考 C語言rand()獲取隨機數和windows下的CryptGenRandom)
總結
以上是生活随笔為你收集整理的WIN10 x64搭建OLLVM4.0 android NDK 编译环境跨坑指南的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 流量、技术、超级APP,百度吹响国潮IP
- 下一篇: 关掉微软没用的服务,让你的电脑提速百倍(