逆向方式有多種:靜態(tài)、動(dòng)態(tài), 工具也很多:JEB、IDA、IDEA/AndroidStudio,調(diào)試內(nèi)容:Smali、So庫(kù)。
本文介紹IDEA動(dòng)態(tài)調(diào)試Smali方式。
獲取Smali文件
用Apktool反編譯獲取Smali文件,也可使用集成工具AndroidKiller反編譯apk。
- Apktool 在jar和apk所在目錄使用命令行
apktool d ***.apk -o Project,即反編譯到Project目錄。 - AndroidKiller 直接將apk拖進(jìn)主界面即可,反編譯后結(jié)構(gòu):

生成可調(diào)式APK
- 在
AndroidManifest.xml中添加android:debuggable="true" - 在入口Activity的onCreate方法開始處添加
android.os.Debug.waitForDebugger(),
對(duì)應(yīng)的smali代碼為:invoke-static {}, Landroid/os/Debug;->waitForDebugger()V。
onCreate.png - 重新打包。
- Apktool:
b -d Project -o debug.apk - AndroidKiller: 菜單欄 Android -> 編譯
- 安裝生成apk。
IDEA 導(dǎo)入Project
- 導(dǎo)入反編譯項(xiàng)目:Import Project,選擇Project目錄后將反編譯文件導(dǎo)入到IDEA。
-
在目標(biāo)Smali文件打上斷點(diǎn)。
breakpoint.png
IDEA的smalidea插件用0.0.3斷點(diǎn)進(jìn)不去,升級(jí)至0.0.5后調(diào)試成功。
smalidea下載地址
調(diào)試環(huán)境配置
- 運(yùn)行程序,手機(jī)會(huì)顯示白屏或等待調(diào)試界面。
-
打開DDMS,目錄\sdk\tools下運(yùn)行monitor.bat,DDMS出現(xiàn)程序待調(diào)試狀態(tài)。
** 紅色Debug表示此進(jìn)程正等待調(diào)試,15745為pid/進(jìn)程ID,8600為此進(jìn)程的遠(yuǎn)程機(jī)器調(diào)試端口號(hào),8700為通用備用端口號(hào)**。
ddms.png - 配置遠(yuǎn)程調(diào)試選項(xiàng),
點(diǎn)擊菜單欄** Run ,選擇 Edit Configurations ,點(diǎn)擊 ** + ** 選擇 Remote **。
** 配置遠(yuǎn)程調(diào)試選項(xiàng) **
Host:localhost
Port:8600
調(diào)試模式:Attach
項(xiàng)目:<whole project> 或 Project

遠(yuǎn)程調(diào)試
點(diǎn)擊Debug開始遠(yuǎn)程調(diào)試。

開始調(diào)試后,DDMS中Debug標(biāo)志變成綠色,表示已經(jīng)成功連接遠(yuǎn)程調(diào)試服務(wù)端。
Console中也有成功連接輸入Connected to the target VM, address: 'localhost:8600', transport: 'socket'

然后觸發(fā)斷點(diǎn)條件后,就會(huì)進(jìn)入斷點(diǎn)。

剩下的就跟平時(shí)開發(fā)斷點(diǎn)調(diào)試一樣。
相關(guān)推薦:
JEB動(dòng)態(tài)調(diào)試apk
AndroidStudio 動(dòng)態(tài)調(diào)試Smali代碼
參考:


