基于llvm的iOS代碼混淆工具 -- Hikari

Android 有各種加密混淆工具,現在iOS逆向也在發展,自然也有對應的混淆工具應運而生。
利用混淆工具,可以更好地保護我們的代碼,不被輕松地惡意分析破解。
混淆工具主要優點是:
1,無須變動項目源碼。
2,功能靈活可選,根據需要自由組合

目前的不足主要是:
1,會導致安裝包體積增大。
2,混淆代碼會被編譯優化掉。
3,提審存在被拒的風險。

這里介紹的是張總寫的工具:Hikari
下載地址:https://github.com/HikariObfuscator/Hikari/releases
下載完成,將 Hikari.xctoolchain 解壓到~/Library/Developer/Toolchains/ 或 /Library/Developer/Toolchains/ 都可以。
現在新版本張總已經打包成安裝器了,應該直接安裝即可。我是之前下載的老版本,這里選擇前者,只對當前用戶可用。

解壓文件示意圖

接著,在 Xcode->Toolchains中,選擇 HikariObfuscator


選擇HikariObfuscator

然后將所有與要運行的target相關的target的Enable Index-While-Building 的值改為NO。
否則編譯會報錯: error: cannot specify -o when generating multiple output files

還需要關閉編譯優化,將所有 target 的 Optimization Level 改為 None:


關閉編譯優化

然后通過編譯參數,開啟需要的混淆選項,在 Other C Flags 里面加。
可用參數如下:

-mllvm -enable-allobf 全部啟用
-mllvm -enable-bcfobf 啟用偽控制流  
-mllvm -enable-cffobf 啟用控制流平坦化
-mllvm -enable-splitobf 啟用基本塊分割  
-mllvm -enable-subobf 啟用指令替換  
-mllvm -enable-acdobf 啟用反class-dump  
-mllvm -enable-indibran 啟用基于寄存器的相對跳轉,配合其他加固可以徹底破壞IDA/Hopper的偽代碼(俗稱F5)  
-mllvm -enable-strcry 啟用字符串加密  
-mllvm -enable-funcwra 啟用函數封裝

這里測試了幾種:
1,字符串加密
可以看到,混淆前在 IDA 里面,字符串清晰可見,混淆后字符串基本沒影了。


混淆前

混淆后

2,函數封裝
原本簡單的一個函數,現在變成一大串結構。


混淆前

混淆后

3,偽控制流
本來沒有控制流程的,增加了好幾個跳轉流程。


混淆前

混淆后

4,控制流平坦化
騰訊安全博客的圖效果更佳突出,無恥地盜圖了:


混淆前

混淆后
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。