Android調試系列—使用android studio調試smali代碼


1、工具介紹

使用工具

android killer:用於反編譯apk包,得到smali代碼

android studio:調試smali代碼工具,或者使用idea,android studio就是在idea的基礎上修改的

smalidea-0.03.zip:  as插件,需要安裝到android studio中 , 下載地址

模擬器或者或者真機:運行要調試的程序

樣本:使用網絡上的某apk程序,  下載地址

 

2、前期准備

2.1  手機或者模擬器安裝應用

adb instll GGNdkTest1.apk

2.2  使用android killer反匯編測試包GGNdkTest1包,生成smali文件夾

image

2.3  android studio安裝smalidea-0.03插件,點擊File->Settings->plugins->instal plugins from disk,選擇下載的zip包就行,不要解壓。安裝完成后,AS提示重啟生效,重啟即可

image

 

2.3  AS導入工程,選擇上一步的smali目錄,一路next,最后結果如下圖

image

 

3、調試步驟

3.1  配置AS調試配置,Run->Edit configurations,點擊+號,新建remote類型調試器,設置Name, 修改端口號,可以選擇被占用的任意端口,本次設置為8800

image

 

3.2 在AS的終端以調試模式啟動應用,進程掛起,此時運行命令查看該應用的進程號為28881

image

 

3.3  設置端口轉發,這條命令的含義可以認為是在本地8800端口與手機28881進程之間建立一條通道,當開始調試時,AS連接本地的8800端口,通過這條通道控制程序的運行

image

 

3.4  下斷點,為了清除起見,在左側欄鼠標右鍵選擇顯示行號,在行號旁邊單擊即可下斷點,需要注意的是,smali並不是每一行都可以下斷點,當下斷點沒有成功時,選擇其他地方下斷點測試。image

 

3.5  調試 run->debug選擇剛才新增的調試器,此時程序會斷在設置的斷點的行,調試器解密如下

image

 

左側debug欄最上面一行有運行、單步運行、進入函數、強制進入、跳出等按鈕,下面顯示的是調用棧

中間variables欄可以觀察變量的值

右側watch欄可以關心的寄存器,例如上圖的v1。

4、總結

在網上搜索了一些教程,什么打開ddms,設置8700或者什么端口,再關閉ddms之類的,各種方法滿天飛,看的最迷茫的就是ddms的開啟關閉和端口的設置。

根據網上搜到的內容自己總結了下,如下圖所示

image

adbd:運行在手機端,daemon進程,與adb server通信,同時與手機端的debugger通信,調試各個程序

adbServer:運行在PC,與adbd通信,同時監聽5037端口。

DDMS: 1、連接5037端口。

                2、監視每個進程,並為每個進程建立單獨的調試端口,例如8600、8601等等,各種調試器可以直接連接這些端口進行調試。

                3、提供一個特殊調試端口8700,它可以接收8600、8601…這些端口的數據,並與手機的任何進程進行通信。

                3、自身提供一些手段可以調試每個進程。

Debugger:各種調試器,可以選擇連接8700或者其他每個進程單獨的調試端口。

知道了上述各個組件的作用,那么一下幾種場景可以正常工作

1、開啟DDMS,調試器連接8700端口,不需要設置端口轉發,可成功調試

2、開啟DDMS,調試器連接86**端口,不需要設置端口轉發,可成功調試

3、不開啟DDMS,查看要調試的進程ID,設置端口轉發(上述步驟3.3),可成功調試

前兩個比較容易理解,第三個也可以成功,有些不明白了就

先查看端口信息

image

當執行完端口轉發后,8800端口處於監聽狀態,並且和5037同輸入adb server進程

當開始調試時,AS進程連接到了adb的8800端口。

所以猜測是這樣,adb server 默認監聽5037端口,DDMS可以通過5037端口調試進程,調試器通過DDMS連接adb server。

當執行端口轉發后,adb server監聽了另外一個端口8800,所以debugger可以直接連接該端口進行調試,而不需要經過DDMS

 

個人猜測,有錯誤的地方,還請大牛指正


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM