教程導航
- Android Apk反編譯系列教程(一)如何反編譯APK
- Android Apk反編譯系列教程(二)APK重打包
- Android Apk反編譯系列教程(三)Android Studio除錯smali程式碼
背景
程式碼除錯能夠幫助我們更加快速分析程式碼,幫我們驗證各種猜想。因此掌握smali程式碼除錯的技巧對於APK反編譯來說是必不可少的技能
先決條件:目標程式可除錯
將應用修改為可除錯
應用可除錯,需要app的manifest檔案裡面開啟debuggable=true
。具體如何將apk變為debuggable的,可參見Android Apk反編譯系列教程(二)APK重打包
- debug編譯的時候debuggable預設是開啟的
- release編譯的時候debuggable預設是關閉的
<application
android:debuggable="true"
</application>
複製程式碼
驗證修改是否成功
- JDWP詳解參見:www.jianshu.com/p/1f22362f4…
// 篩選出目標app程式
adb shell ps | grep 包名
// 檢視手機裡面可除錯的程式,如果上面挑選出來的程式在adb jdwp出的列表裡面,那麼上述修改就是成功的
adb jdwp
複製程式碼
JDWP除錯原理
smali程式碼除錯方法
(一) 定位到需要除錯的程式
通過ps挑選出需要除錯的程式
adb shell ps | grep 包名
複製程式碼
二)新建本地程式與手機上遠端程式建立連線
db forward tcp:8700 jdwp:程式號
複製程式碼
(三)Android Studio attch到本地程式對應埠上面
(1)將aptool反編譯專案匯入AS
(2)新建遠端連線
- 埠與上述埠(8700)一致即可
- android studio-> localhost:8700->手機對應程式
(3)定位到smail程式碼所在位置打斷點
定位的技巧這裡不坐贅述,將在後面的系列教程裡面詳解介紹。這裡推薦一個輔助分析的工具bytecode-viewer。特點
- 能夠同時分析資源和程式碼
- 程式碼支援java和smali程式碼對比分析,這樣就能快速幫我們定位到smali程式碼所在位置
(4)點選debug即可
相關輔助指令
(1)檢視埠對應的程式
lsof -i:埠
複製程式碼
(2)檢視手機裡面的程式 注意:通過adb shell進入手機終端後ps的程式很少,要通過下面的指令才可以
adb shell ps | grep 包名
複製程式碼
相關連結
- AS debug smali教程:malacupa.com/2018/11/11/…
- mac 安裝timeout:gist.github.com/dasgoll/7b1…
- smali idea外掛:github.com/JesusFreke/…