標籤:

iOS內核調試教程

由於iOS內核是一個非常複雜的系統,所以必須要使用調試器才能很方便地進行調試,這樣,你就可以很輕鬆地分步執行代碼,設置斷點,讀取和寫入內存和寄存器。鑒於調試器的便利性,蘋果工程師自己也開發了一個內置調試協議。不過,該工具的安裝和運行有點複雜,所以我特此進行以下調試介紹。

步驟1:使用說明

1.你要具備一個可以設置啟動參數的iOS設備,或下載一個內核修補程序來啟用調試。請注意,在本文的說明中,我會以iPhone 4為例進行演示,這樣我就可以在使用RedSn0w工具時設置引導參數。

2.一個iOS串列調試電纜,你可以自己購買或在諸如AliExpress等網站上購買。這些電纜用於將iOS設備的串列輸出轉換為USB協議,另外,你還必須為你正在使用的操作系統安裝正確的驅動程序。

3. 帶有XCode的GDB將會非常有利於你的調試。

4.確保serialKDPproxy已安裝,用於內核調試的協議通常用於不是串列的UDP套接字,所以你需要使用一個工具來代替它。幸運的是,有人對該工具進行了編譯。

步驟2:破解設備並設置引導參數

iOS內核不能被直接調試,這是因為蘋果公司的工程師不想讓攻擊者輕易發起攻擊。所以為了達到調試的目的,我必須先破解設備,才能夠設置正確的啟動參數並應用相應的內核補丁。

關於如何使用RedSn0w破解iOS設備,請點此鏈接,此處略去不表,但我要提醒的是,在使用該工具時一定要添加適當的啟動參數。你可以通過Extras -> Even More -> Preferences -> Boot Args進行設置。在文本框中,你應該輸入以下字元串「debug = 0x8f -v wdt = 0」。這些參數為了告訴你內核啟動的方式:

1.在調試模式中使用特殊標誌引導;

2.在詳細模式下啟動;

3.啟動監視器的計時暫停功能,這樣可以暫停執行過程,以免被發現。

這樣設備將在停止啟動,直到你添加一個調試器。

步驟3:使用SerialKDPproxy

現在該設備暫停,直到添加了調試器,為此我需要啟動serialKDPproxy。./SerialKDPProxy的用法很簡單,舉個例子,在我的設備中就是./SerialKDPProxy /dev/tty.usbserial-AH00NR2W。在此之後,我就可以看到從設備輸出到控制台的各種調試消息。你也可以在設備啟動之前運行這個程序,並且會有大量的輸出,這將有助於告訴你設備啟動時真正發生了什麼。例如,顯示的內核滑動(kernel slide),會幫助你確定函數地址。

步驟4:使用GDB 連接到內核

使用serialKDPproxy就可以非常輕鬆地連接到內核。首先,你需要使用gdb -arch armv7命令啟動gdb。這說明gdb將調試iOS設備,而不是具有i386體系結構的OS X應用程序。在gdb提示符之後,你需要執行的所有操作都是輸入target remote-kdp,然後附加localhost。這時,你應該能得到一個響應,說你已經連接上了內核。如果你不能確保將正確的引入引導參數,那就將serialKDPproxy附加到正確的設備上。

另一種方法是,如果你有一個符號化的內核緩存,你可以在開始gdb時將它添加到參數中。然後,它將在連接時將這些符號添加到內核進程中,並允許你通過它們的名稱而不是僅僅通過地址來引用函數。

步驟5:基本調試功能

現在你基本上擁有了gdb通常擁有的所有功能,這意味著你可以使用命令p *(int *)地址來獲取內存地址,也可以使用set {int} = val來設置內容。你也可以使用x / i addr或反彙編功能反彙編代碼,你也可以使用命令寄存器查看所有寄存器。斷點也可以由命令break *(addr)來設置,以上這些都是標準的gdb命令。

這些gdb命令的功能非常強大。有很多情況下,這可以大大縮短你逆向工程的時間。有時一分鐘的調試可能相當於你二進位靜態分析的幾個小時。

步驟6:設置一個斷點

假設你正在分析一個漏洞的OSUnserializeXML函數,如果你想知道它在特定的時間調用堆棧的過程,你就可以使用靜態分析來查看像IDA Pro這樣的程序中的內核程序集,或者你可以簡單地在IDA中找到OSUnserializeXML函數的地址,並將其添加到在啟動時列印到串列控制台的內核滑動中,以查找函數的真實地址,然後在那裡設置一個斷點。然後當它被調用時,執行就會停止,此時你將通過完整的控制來分析正在發生的進程。

如若轉載,請註明原文地址: 4hou.com/technology/973 更多內容請關注「嘶吼專業版」——Pro4hou

推薦閱讀:

幾個比較重要的更新
網路安全入坑指南(授課版)
使用zANTI進行滲透測試
如何從物理隔離設備里偷出數據?研究人員再次花式秀技
i春秋收費為何那麼高?

TAG:信息安全 |