安裝好AndroidStudio後設置JDK和SDK路徑
安裝Smali插件
選擇你的Smalidea插件的位置
添加插件
接下來把要安裝的apk安裝到模擬器上運行該進程
打開AS,選擇打開項目,直接導入AK反編譯的apk文件路徑即可。
複製上面的文件路徑
打開AS導入對應路徑項目
導入成功後選擇Project
連接模擬器Shell查看進程
找到我們打開進程的PID
轉發調試端口到8700
開始配置AS的調試設置
添加調試策略
選擇字符串搜索,找到要下斷點的Smali代碼位置,我們這裏以字符串定位
我們搜索onKey()函數,並在其中執行的位置下斷點。
點擊Debug按鈕
開始測試調試,隨意輸入一些內容按回車,發現多出以下信息
右側是自定義查看窗口,可以隨意查看想要看的變量
F8鍵是單步步過,也可以按下面的按鈕實現
F7單步步入
這種動態調試雖然沒有jeb提示那麼清晰,但是卻更加穩定,可以修改this指針的值,除了this指針的值其他寄存器是不能修改的。
第二種調試方法
可以不用輸入轉發端口指令,只需要打開ddms,點擊想要調試的進程
然後直接點擊Debug按鈕即可調試
如果出現以下錯誤提示是代表調試端口被佔用了,需要重啓一下連接服務
重啓服務
重新選擇要調試程序,發現有調試圖標
再次點擊調試,又一次進入調試狀態
指定調試開始的入口點
有的時候我們不希望以附加方式進行調試,而是在程序啓動前就設置好調試斷點。就像OD自動停在OEP一樣,再執行下就直接斷在我們設置的斷點上。我們首先需要先進入shell輸入以下指令,用調試模式啓動某一進程
am start -D -n 包名/入口活動名 //包名和入口活動名可以用AndroidKiller獲取
打開jeb隨意選取一個要調試的內容
設置好斷點
點擊調試按鈕找到指定的進程就可以動態調試了,但是jeb很不穩定,我更願意使用AS的調試方式。
AS的調試方式
上面的命令行設置相同,只需要設置響應的斷點
打開ddms,發現紅色調試圖標,代表當前進程在等待我們的對其進行掛接
然後直接點擊Debug就可以掛接到調試進程了