author: Dlive
date: 2016/10/6
0x00 前言
之前有人問過smali的動態調試方法,其實網上已經有很多文章講這些內容,但是為了方便大家學習,我還是寫一下讓大家少走點坑吧。
0x01 Smali的動態調試
這里介紹一種比較方便的調試方法,這個調試方法不需要重打包apk,操作簡單也比較常用。
1.調試環境
推薦一下AndroidStudio(下文簡稱AS)這款IDE,既然Google已經有親兒子AS,我覺得Eclipse其實沒有什么太大使用必要了。
關於怎么安裝AS我就不說了,網上隨便都能搜到很多帖子。
安裝后AS后,想要動態調試Smali還需要安裝一個插件Smalidea,可以在AS的settings->plugins里面安裝。(插件下載鏈接:http://pan.baidu.com/s/1o8RL9jW)
我的調試環境是一台root過的且開啟了調試功能的手機(ps.模擬器應該可以,我沒試過)
如何開啟調試功能,比較簡單的方法是安裝一個xposed插件:xinstaller(安裝可參考:http://www.open-open.com/lib/view/open1426304176732.html)
2.調試步驟
首先使用AndroidKiller反編譯apk,反編譯效果如下:
使用AS打開(File->Open)反編譯結果所在文件夾(Project)
在AS中配置遠程調試,打開Run->Edit Configurations,添加遠程調試 (點擊如下圖加號選擇Remote)
配置遠程調試,Name隨便填就好,host為localhost,端口8700
打開monitor(安裝SDK后在命令行下直接輸入monitor即可),如果手機成功開啟了調試功能,可以在monitor中看到正在運行的apk包名
在手機上安裝apk后以在terminal運行如下命令使apk以調試模式運行
adb shell am start -D -n packageName/ActivityName
我測試所使用的apk包名為com.example.findpass,活動名為com.example.findpass.MainActivity(可簡寫為.MainActivity)
運行上述命令之后可以看到手機屏幕上會彈出一個Waitting For Debugger的框,monitor中com.example.findpass進程前會有個紅色的小蟲子的圖標
在AS中設置斷點
然后選擇Run/Debug,找到剛剛設置的調試選項進行調試即可
你可以在調試器中看到變量的值