一般動(dòng)態(tài)調(diào)試app時(shí),都是在終端里用lldb直接調(diào)試,但是用Xcode的Attach to Process也可以連接到真機(jī)上的進(jìn)程進(jìn)行調(diào)試。但是只能調(diào)試用自己的證書簽名的app。
在Xcode上調(diào)試的優(yōu)點(diǎn):
- 有UI界面,查看堆棧更直接,可以用Xcode打斷點(diǎn)。
- 可以使用
debug gauges里的Disk和Network等工具。 - 輸入lldb命令時(shí)有自動(dòng)補(bǔ)全。
- 可以使用Xcode的
Debug UI Hierarchy功能,直接查看app的界面布局。 - 可以使用Xcode的
Debug Memory Graph功能,查看當(dāng)前內(nèi)存中存在的所有對(duì)象,以及對(duì)象之間的引用關(guān)系。
步驟如下。
1.重簽名需要逆向的app
重簽名后才能用Xcode attach。而重簽名前需要對(duì)app進(jìn)行砸殼。這些步驟就不再重復(fù)了。
額外說一句,在砸殼后建議進(jìn)行一下恢復(fù)符號(hào)表的操作?;謴?fù)符號(hào)表后,在調(diào)試時(shí)就能直接在堆棧中看到方法名,免去了計(jì)算偏移量然后在hopper里查找的麻煩。參考:iOS符號(hào)表恢復(fù)&逆向支付寶, restore-symbol。
2.Attach to Process
重簽名后安裝到越獄設(shè)備上,啟動(dòng)app,在Xcode中隨便打開一個(gè)工程,選擇越獄設(shè)備,就可以在Debug->Attach to Process中找到正在運(yùn)行的進(jìn)程名和進(jìn)程id,點(diǎn)擊后就會(huì)開始連接。大概過1分鐘就會(huì)連接上。
3.查看UI
連接上后,就可以點(diǎn)擊使用Xcode的Debug UI Hierarchy來查看界面布局:

注意,Debug UI Hierarchy對(duì)Xcode版本似乎有要求,在調(diào)試重簽名app時(shí),Xcode8.3.2可以,而Xcode8.2就沒有這個(gè)功能按鈕。
4.查看內(nèi)存信息
點(diǎn)擊Debug Memory Graph按鈕,可以查看當(dāng)前內(nèi)存中存在的數(shù)據(jù)。打印地址,查看引用關(guān)系,可以配合malloc stack進(jìn)行追蹤。如果打開了malloc stack,就可以直接在右邊顯示這個(gè)對(duì)象的創(chuàng)建堆棧。開啟方法參考:iOS逆向:在任意app上開啟malloc stack追蹤內(nèi)存來源

5.查看正在使用的文件
debug gauges中的Disk工具可以查看app當(dāng)前打開的文件。

6.instrument調(diào)試
類似的,也可以用instrument調(diào)試重簽名后的app,不過并不是所有工具都可以使用,對(duì)逆向的幫助不大。