如果你目前還做不了巨人,那么就去思考如何優(yōu)雅的站在巨人肩膀上。
第一章:工具篇
1.1 Mach-O操作工具
1.1.1 otool
Xcode自帶的查看macho文件結(jié)構(gòu)信息工具,類似Windows上的PE文件信息查看工具,不過這個是命令行的,直接在控制臺輸入otool就可以打印支持參數(shù),如下圖所示
一般我們常用的不多服鹅,例如打印加載的動態(tài)庫可以輸入otool -L testiOS 輸出如下:
當(dāng)然也可以使用otool工具查看目標(biāo)Macho是否支持Bitcode
對于靜態(tài)庫而言
otool -l xxxx.a | grep __bitcode | wc -l
輸出是個數(shù)字的話則說明是支持bitcode的文件數(shù)
對于mach-o文件則是
otool -l xxxx | grep __LLVM | wc –l
1.1.2 MachoView
?? 一款查看二進制的信息的可視化工具,相對otool來說查看更方便百新,而且不僅可以查看還可以修改Macho企软,例如我們可以將armv7的aslr去掉的話只要修改Mach Header里面MH_PIE 00200000->00000000 修改之后MachoView就會顯示紅色command+S保存后就生效了。
1.1.3 class-dump
?? 一款可以將二進制里面的OC類的頭文件信息導(dǎo)出吟孙,這樣可以幫助我們進行逆向分析澜倦。例如我們對testiOS這個Macho文件執(zhí)行導(dǎo)出頭文件如下圖4:
在執(zhí)行class-dump -s -S -H testiOS -o ~/Desktop/headers 后生成的ViewController.h里面基本上就是原始類聲明。
1.1.4 optool
一款給Mahco注入動態(tài)庫的工具杰妓,類似的還有insert_dylib等藻治,此工具操作相對方便一點,詳細參數(shù)請查看下圖5巷挥,在我們寫好tweak(后面會介紹怎么寫tweak)之后桩卵,我們需要借助此類工具將其注入到目標(biāo)MachO里面。
使用說明如下:
執(zhí)行如下命令將GamePlugin.framework動態(tài)庫(假設(shè)是我們寫好的tweak)注入到testiOS倍宾,如圖6:
optool install -c weak -p "@executable_path/Frameworks/GamePlugin.framework/GamePlugin"-t testiOS
并將GamePlugin.framework拷貝到testiOS同一級目錄的Frameworks目錄(沒有的話就手動創(chuàng)建)
1.1.6 restore-symbol
????? iOS應(yīng)用在上線前都會裁去符號表雏节,以避免被逆向分析,
? ? ?恢復(fù)后方便動態(tài)調(diào)試符號化堆棧高职。
1.1.7 dumpdecrypted
iOS應(yīng)用上架到AppStore上都會被蘋果加上一層官方殼钩乍,所以直接從AppStore上拿到的iPA需要先脫殼后才方便進行后續(xù)的靜態(tài)分析,砸殼具體操作方法如下:
1).先將dumpdecrypted.dylib拷進對應(yīng)目標(biāo)App的沙盒目錄(這里可以使用scp怔锌、或者直接借助愛思助手或者pp助手類似的工具)
2).ssh之后cd到目標(biāo)App的沙盒目錄后執(zhí)行以下命令:
DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib/var/mobile/Containers/Bundle/Application/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXX/iOSTest.app/iOSTest
上面可執(zhí)行程序的完整路徑可以通過愛思助手等工具查看:
1.1.8 frida-iOS-dump
?這個工具是利用frida+
dumpdecrypted完成砸殼自動化寥粹。
?https://github.com/AloneMonkey/frida-ios-dump這里面有詳細介紹变过。
1.1.9 CrackerXI+
? ? 也是一個脫殼工具,誰用誰知道涝涤,有時候知道脫殼原理之后媚狰,使用此工具更佳方便。
1.2阔拳、靜態(tài)分析工具
1.2.1 Hopper Disassembler
? ?一款靜態(tài)分析工具崭孤,目前只支持MacOS,特點是加載快糊肠,交互性等其它功能還是欠缺一點辨宠,匯編修改功能還可以,作者經(jīng)常用來快速查看和簡單修改罪针。
例如已經(jīng)發(fā)現(xiàn)某個類的方法就是判斷是否是Vip彭羹,并且方法的返回值為BOOL時黄伊,我們可以直接按如下修改:
然后保存生成新的Macho文件即可
1.2.2 IDA
iDA一直以來都是安全人員的標(biāo)配工具泪酱,因為它支持Windows、MacOS还最、Linux三平臺墓阀,而且還支持很多的cpu架構(gòu)指令,關(guān)鍵的關(guān)鍵就是交互性很好拓轻,你可以自定義斯撮。官網(wǎng)也有免費版的。
1.3扶叉、動態(tài)調(diào)試工具
1.3.1. debugeserver
一步一步用debugserver + lldb代替gdb進行動態(tài)調(diào)試?http://iosre.com/t/debugserver-lldb-gdb/65
1.3.2 lldb插件
1.xia0LLDB //增強lldb的python命令勿锅,支持:
choose 通過類名返回類名內(nèi)存地址。
sbt?? ?bt的增強版可以符號化堆棧枣氧,這個還是蠻有用溢十。
ivars? 可以查看類的成員變量。
詳細的請在下面的github地址查看介紹:
https://github.com/4ch12dy/xia0LLDB
2.chisel //增強lldb的python命令
這是facebook的一個開源項目也是lldb的python插件使用很方便具體詳情請查看下面的github介紹
https://github.com/facebook/chisel
1.3.2 cycript
? 這個工具一般用來動態(tài)調(diào)試的時候注入相應(yīng)代碼進行測試功能用的达吞。
1.3.3 Reveal
一款動態(tài)查看UI層次的工具张弛。可以快速從UI定位核心業(yè)務(wù)代碼位置用酪劫。
1.4吞鸭、靜態(tài)Patch&&Hook工具
1.4.1 MonkeyDev
方便越獄開發(fā),封裝了theos覆糟,支持<反調(diào)試刻剥、方法跟蹤、Xcode調(diào)試等功能>
https://github.com/AloneMonkey/MonkeyDev
1.4.1 codesign滩字、ldid
codesign造虏、ldid
1.5盯滚、網(wǎng)絡(luò)抓包工具
1.5.1 charles、Fiddler
?常見的HTTP/HTTPS抓包可以用
1.5.2 rvictl+<wireshark酗电、tcpdump>
?TCP底層抓包可以用rvictl+wireshark或者tcpdump
1.6魄藕、其他輔助工具
1.6.1 控制臺(MacOS)
可以很方便查看Mac App或者iOS
App的輸出log信息/Applications/Utilities/Console.app