iOS逆向教程之動態除錯詳解

2022-09-21 14:18:10 字數 2192 閱讀 8682

前言

有時候想更了解別人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 檔案再安裝進越獄手機的,需要輸入賬號和密碼才能執行,而輸入賬號密碼需要原來手機的驗證碼,如果沒有驗證碼輸入框,驗證碼是在輸入完密碼後接著輸入...