前段時間欠母,根據公司安排,研究了移動應用的加固與安全方面的知識澜术,為了避免忘記艺蝴,本篇文章主要記載使用步驟。
如果只是想在項目里進行代碼混淆鸟废,閱讀OLLVM代碼混淆移植與使用這篇博客就行了。如果想實戰(zhàn)操作姑荷,多理解一些原理和過程盒延,推薦《iOS應用逆向與安全》這本書
代碼混淆的大概流程是了解LLVM的架構,下載并編譯LLVM鼠冕,開發(fā)和調試Pass添寺,LLVM Pass的源代碼分析,替換Xcode編譯器懈费,大概研究了若干星期计露。。憎乙。票罐。
終于在Xcode上集成了Toolchains,正常的Xcode上應該是沒有這個選項的泞边。我們首先用系統(tǒng)默認的Toolchains編譯一下该押,并且把編譯包另存一個地方。
然后我們再選擇我們自己添加的Toolchains,并且設置Build Setting-->Build Options-->Enable Index-While-Building Functionality設置為No
設置混淆方式Apple Clang - Custom Compiler Flags -->Other C Flag 設置為-mllvm -sub -mllvm -sobf -mllvm -fla -mllvm -bcf
好了,打開Hopper或IDA 阵谚,把兩個包放進去蚕礼,找到ViewController.m文件的viewDidLoad方法觀察
觀察上面兩張圖,差距很明顯梢什。未混淆的代碼奠蹬,使用逆向工具,里面的業(yè)務邏輯基本能看懂嗡午,而混淆后的代碼囤躁,通過增加一些無用的代碼,拆分代碼塊翼馆,并使代碼扁平化割以。提高了靜態(tài)分析的難度。
靜態(tài)庫混淆以上同樣適用应媚。