Android Apk反編譯系列教程(三)Android Studio除錯smali程式碼

尋找極限的貓發表於2019-04-14

教程導航

背景

程式碼除錯能夠幫助我們更加快速分析程式碼,幫我們驗證各種猜想。因此掌握smali程式碼除錯的技巧對於APK反編譯來說是必不可少的技能

先決條件:目標程式可除錯

將應用修改為可除錯

應用可除錯,需要app的manifest檔案裡面開啟debuggable=true。具體如何將apk變為debuggable的,可參見Android Apk反編譯系列教程(二)APK重打包

  • debug編譯的時候debuggable預設是開啟的
  • release編譯的時候debuggable預設是關閉的
<application
    android:debuggable="true"
</application>
複製程式碼

驗證修改是否成功

// 篩選出目標app程式
adb shell ps | grep 包名 
// 檢視手機裡面可除錯的程式,如果上面挑選出來的程式在adb jdwp出的列表裡面,那麼上述修改就是成功的
adb jdwp
複製程式碼

JDWP除錯原理

Android Apk反編譯系列教程(三)Android Studio除錯smali程式碼

smali程式碼除錯方法

(一) 定位到需要除錯的程式

通過ps挑選出需要除錯的程式

adb shell ps | grep 包名
複製程式碼

二)新建本地程式與手機上遠端程式建立連線

db forward tcp:8700 jdwp:程式號
複製程式碼

(三)Android Studio attch到本地程式對應埠上面

(1)將aptool反編譯專案匯入AS

Android Apk反編譯系列教程(三)Android Studio除錯smali程式碼

(2)新建遠端連線

  • 埠與上述埠(8700)一致即可
  • android studio-> localhost:8700->手機對應程式
    Android Apk反編譯系列教程(三)Android Studio除錯smali程式碼

(3)定位到smail程式碼所在位置打斷點

定位的技巧這裡不坐贅述,將在後面的系列教程裡面詳解介紹。這裡推薦一個輔助分析的工具bytecode-viewer。特點

  • 能夠同時分析資源和程式碼
  • 程式碼支援java和smali程式碼對比分析,這樣就能快速幫我們定位到smali程式碼所在位置

Android Apk反編譯系列教程(三)Android Studio除錯smali程式碼

(4)點選debug即可

Android Apk反編譯系列教程(三)Android Studio除錯smali程式碼

相關輔助指令

(1)檢視埠對應的程式

lsof -i:埠
複製程式碼

(2)檢視手機裡面的程式 注意:通過adb shell進入手機終端後ps的程式很少,要通過下面的指令才可以

adb shell ps | grep 包名
複製程式碼

相關連結

相關文章