用 KGDB 來替 Android 除錯的實用技巧

內核(Kernel)除錯功能讓資安研究人員在進行分析時能夠監視和控制設備。在Windows、macOS和Linux等桌面平台上,這很容易進行。但要在Android設備(如Google Nexus 6P)上進行內核除錯則困難得多。在本文中,將介紹一種在Nexus 6P和Google Pixel上進行內核除錯的方法而無須特製的硬體。

Joshua J. Drake和Ryan Smith為此目的打造了一條UART除錯線,效果很好。然而對於不擅長製作硬體的人(像是筆者這樣的軟體工程師)來說,這可能很困難。而替代方案是透過serial-over-usb通道來進行內核(Kernel)除錯 也是可行的。

這個方法可以追溯到2010年,這表示部分介紹已經過時。但我發現的作法可以利用其關鍵要點,然後用在今日的Android設備上。讓研究人員可以使用除錯功能來確認CPU執行的當前狀態,讓分析更加快速。那該如何進行?

Android是用Linux內核打造的,其中包含了內建的內核除錯程式KGDB。KGDB依靠串列埠來連接除錯設備和目標設備。正常情況如下:

圖1、KGDB工作模式

 

目標和除錯設備透過串列線連接。使用者在除錯機上用GDB來附加串列設備檔案(如/dev/ttyS1),指令是target remote /dev/ttyS1。之後,GDB可以通過串列線和目標設備上的KGDB進行溝通。

KGDB核心元件處理實際的除錯工作,像是設置中斷點和取得記憶體內的資料。KGDB I/O元件可以連接KGDB核心元件和低階串列驅動程式以處理除錯資訊傳輸。 繼續閱讀