前言
有時候想更了解別人app的呼叫流程,就需要在app執行的時候進行動態除錯。動態除錯指的是將程式執行起來,通過下斷點、列印等方式,檢視引數、返回值、函式呼叫程式設計客棧流程等。
下面話不多說了,來隨著小編一起看看詳細的介紹吧
xcode的動態除錯原理
首先了解一下 xcode 編譯和偵錯程式的發展。xcode 中的編譯器發展歷程:gcc -> llvm,偵錯程式的發展歷程:gdb -> lldb 。
xcode 除錯安裝到手機上的應用的原理:xcode 通過 lldb 偵錯程式把除錯指令傳送到手機上的 debugserver, debugserve程式設計客棧r 再與相應的 app 進行互動,達到除錯的效果。
debugserver 一開始是存放在mac的xcode裡面,路徑:
/applications/xcode.app/contents/developer/platforms
/iphoneos.platforwww.cppcns.comm/devicesupport
/9.1/developerdiskimage.dmg
/usr/bin/debugserver
當 xcode 識別到手機裝置時,xcode 會自動將 debugserver 安裝到手機上。
xcode 除錯的侷限性:一般情況下,只能除錯通過 xcode 安裝的app,無法除錯其它app。
給debugserver賦予許可權
預設情況下 /developer/usr/bin/debugserver 缺少一定的許可權,只能除錯通過xcode安裝的app,如果希望除錯其它app,需要對 debugserver 重新簽名,籤上可以除錯其它app的許可權。
需要的兩個許可權為:get-task-allow 和 task_for_pid-allow
iphone上的 /developer 目錄是唯讀的,無法直接對 /developer/usr/bin/debugserver 檔案簽名,需要先把 debugserver 複製到mac。
通過 ldid 命令匯出檔案以前的簽名許可權:
$ ldid -e debugserver > debugserver.entitlements
debugserver.entitlements 這個檔案其實是個 plist 檔案,在這個檔案中加上上面提到的兩個許可權後,再通過 ldid 命令對檔案重新簽名。
$ ldid -sdebugserver.entitlements debugserver
然後將已經簽好許可權的 debugserver 放到 /usr/bin 目錄,便於找到 debugserver 指令。
debugserver附加到某個app程序
$ debugserver *:埠號 -a 程序
mac遠端連線iphone上的debugserver服務
啟動lldb:
// 在終端輸入
$ lldb
連線debugserver服務
(lldb) process connect connect://手機ip位址:debugserver服務埠號
使用lldb的c命令讓程式先繼續執行
(lldb) c
到此,就可以遠端除錯別人的app了。
常用的lldb指令
給viewcontroller的test方法設定斷點
breatyaquckpoint set -n "-[viewcontroller test]"
檢視指令使用者使用 help 指令: help breakpoint 等。
列印執行緒的堆疊資訊: thread backtrace
很多命令不在這裡贅述,請參考:
aslr
獲取 aslr 的偏移量:
image list -o -f
列印結果的第二列前面的位址就是我們需要的 aslr 的偏移量offset。
假如我們想給某個類中的test方法新增斷點,那麼通過 hooper 工具找到該方法的第乙個記憶體位址,假如為0x010101,然後位址加上我們得到的 aslr 的偏移量就是該方法的實際位址。然後通過該位址給方法下斷點。
breakpoint set -o 0xtyaquc010101+offset
到此就給該方法新增了斷點,之後當程式呼叫該方法的時候,會停在該斷點出。
結語練習 lldb 的各種指令時,推薦先在 xcode 上練習各種用法,因為會有提示和直觀的輸出結果,更容易我們理解。
總結本文標題: ios逆向教程之動態除錯詳解
本文位址:
iOS逆向動態除錯
1.拷貝越獄手機 developer usr bin目錄下的debugserver到mac電腦,在mac端輸入 scp p 2222 root localhost developer usr bin debugserver debugserver 2.對debugserver進行 ios11可以不用...
iOS逆向教程之跟蹤函式呼叫詳解
前言 今天學習的是跟蹤函式呼叫,什麼意思呢,舉個例子,如果想做乙個微信自動搶紅包的外掛程式,就需要寫這麼乙個功能,當紅包來了的時候,自動觸發微信的搶紅包函式。好,那咱就先找到這個函式。對映埠 sh usb.sh forwarding local port 10001 to remote port 2...
IOS逆向分析之Xcode動態除錯APP
1.一台蘋果越獄手機。3.在 cydia 上安裝 openssh,用來登了越獄手機。5.登入越獄手機,預設密碼 alpine 如果是從非越獄的匯出來的 ipa 檔案再安裝進越獄手機的,需要輸入賬號和密碼才能執行,而輸入賬號密碼需要原來手機的驗證碼,如果沒有驗證碼輸入框,驗證碼是在輸入完密碼後接著輸入...