如果你目前還做不了巨人,那么就去思考如何優(yōu)雅的站在巨人肩膀上。
第一章:工具篇
1.1 Mach-O操作工具
1.1.1 otool
Xcode自帶的查看macho文件結(jié)構(gòu)信息工具,類似Windows上的PE文件信息查看工具,不過這個(gè)是命令行的,直接在控制臺(tái)輸入otool就可以打印支持參數(shù),如下圖所示

一般我們常用的不多,例如打印加載的動(dòng)態(tài)庫可以輸入otool -L testiOS 輸出如下:

當(dāng)然也可以使用otool工具查看目標(biāo)Macho是否支持Bitcode
對于靜態(tài)庫而言
otool -l xxxx.a | grep __bitcode | wc -l
輸出是個(gè)數(shù)字的話則說明是支持bitcode的文件數(shù)
對于mach-o文件則是
otool -l xxxx | grep __LLVM | wc –l
1.1.2 MachoView
?? 一款查看二進(jìn)制的信息的可視化工具,相對otool來說查看更方便,而且不僅可以查看還可以修改Macho,例如我們可以將armv7的aslr去掉的話只要修改Mach Header里面MH_PIE 00200000->00000000 修改之后MachoView就會(huì)顯示紅色command+S保存后就生效了。

1.1.3 class-dump
?? 一款可以將二進(jìn)制里面的OC類的頭文件信息導(dǎo)出,這樣可以幫助我們進(jìn)行逆向分析。例如我們對testiOS這個(gè)Macho文件執(zhí)行導(dǎo)出頭文件如下圖4:

在執(zhí)行class-dump -s -S -H testiOS -o ~/Desktop/headers 后生成的ViewController.h里面基本上就是原始類聲明。
1.1.4 optool
一款給Mahco注入動(dòng)態(tài)庫的工具,類似的還有insert_dylib等,此工具操作相對方便一點(diǎn),詳細(xì)參數(shù)請查看下圖5,在我們寫好tweak(后面會(huì)介紹怎么寫tweak)之后,我們需要借助此類工具將其注入到目標(biāo)MachO里面。
使用說明如下:

執(zhí)行如下命令將GamePlugin.framework動(dòng)態(tài)庫(假設(shè)是我們寫好的tweak)注入到testiOS,如圖6:
optool install -c weak -p "@executable_path/Frameworks/GamePlugin.framework/GamePlugin"-t testiOS
并將GamePlugin.framework拷貝到testiOS同一級目錄的Frameworks目錄(沒有的話就手動(dòng)創(chuàng)建)

1.1.6 restore-symbol
????? iOS應(yīng)用在上線前都會(huì)裁去符號(hào)表,以避免被逆向分析,
? ? ?恢復(fù)后方便動(dòng)態(tài)調(diào)試符號(hào)化堆棧。
1.1.7 dumpdecrypted
iOS應(yīng)用上架到AppStore上都會(huì)被蘋果加上一層官方殼,所以直接從AppStore上拿到的iPA需要先脫殼后才方便進(jìn)行后續(xù)的靜態(tài)分析,砸殼具體操作方法如下:
1).先將dumpdecrypted.dylib拷進(jìn)對應(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
?這個(gè)工具是利用frida+
dumpdecrypted完成砸殼自動(dòng)化。
?https://github.com/AloneMonkey/frida-ios-dump這里面有詳細(xì)介紹。
1.1.9 CrackerXI+
? ? 也是一個(gè)脫殼工具,誰用誰知道,有時(shí)候知道脫殼原理之后,使用此工具更佳方便。
1.2、靜態(tài)分析工具
1.2.1 Hopper Disassembler
? ?一款靜態(tài)分析工具,目前只支持MacOS,特點(diǎn)是加載快,交互性等其它功能還是欠缺一點(diǎn),匯編修改功能還可以,作者經(jīng)常用來快速查看和簡單修改。
例如已經(jīng)發(fā)現(xiàn)某個(gè)類的方法就是判斷是否是Vip,并且方法的返回值為BOOL時(shí),我們可以直接按如下修改:

然后保存生成新的Macho文件即可
1.2.2 IDA
iDA一直以來都是安全人員的標(biāo)配工具,因?yàn)樗С諻indows、MacOS、Linux三平臺(tái),而且還支持很多的cpu架構(gòu)指令,關(guān)鍵的關(guān)鍵就是交互性很好,你可以自定義。官網(wǎng)也有免費(fèi)版的。
1.3、動(dòng)態(tài)調(diào)試工具
1.3.1. debugeserver
一步一步用debugserver + lldb代替gdb進(jìn)行動(dòng)態(tài)調(diào)試?http://iosre.com/t/debugserver-lldb-gdb/65
1.3.2 lldb插件
1.xia0LLDB //增強(qiáng)lldb的python命令,支持:
choose 通過類名返回類名內(nèi)存地址。
sbt?? ?bt的增強(qiáng)版可以符號(hào)化堆棧,這個(gè)還是蠻有用。
ivars? 可以查看類的成員變量。
詳細(xì)的請?jiān)谙旅娴膅ithub地址查看介紹:
https://github.com/4ch12dy/xia0LLDB
2.chisel //增強(qiáng)lldb的python命令
這是facebook的一個(gè)開源項(xiàng)目也是lldb的python插件使用很方便具體詳情請查看下面的github介紹
https://github.com/facebook/chisel
1.3.2 cycript
? 這個(gè)工具一般用來動(dòng)態(tài)調(diào)試的時(shí)候注入相應(yīng)代碼進(jìn)行測試功能用的。
1.3.3 Reveal
一款動(dòng)態(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 控制臺(tái)(MacOS)
可以很方便查看Mac App或者iOS
App的輸出log信息/Applications/Utilities/Console.app