AndroidStudio調試smali代碼

最近看了一篇關於動態調試smali代碼的文章:http://blog.csdn.net/superxlcr/article/details/78296673


由於文章是使用Eclipse調試smali代碼的,因此上網找了下使用AndroidStudio調試smali代碼的相關資料


下載AS插件

首先由於AndroidStudio是不支持smali的,因此我們需要下載相關插件來語法高亮以及設置斷點
我們可以下載smalidea插件來安裝:https://bitbucket.org/JesusFreke/smali/downloads/



安裝完後,smali語法會高亮顯示,並且可以設置斷點了

反編譯apk文件

利用apktool工具反編譯apk,下載地址:https://bitbucket.org/iBotPeaches/apktool/downloads/

設置AndroidManifest中的debuggable屬性爲true,並重新打包簽名

爲了讓我們的apk可以用於調試,我們需要修改AndroidManifest中的debuggable屬性爲true:


接着我們可以通過AndroidManifest找到程序的入口Activity(通過android.intent.action.MAIN,android.intent.category.LAUNCHER等屬性)

找到程序入口後,我們有兩種方法用於調試:
  • 在入口Activity中加入:
    invoke-static {}, Landroid/os/Debug;->waitForDebugger()V
    這個是smali語法,對應的Java代碼爲:
    android.os.Debug.waitForDebugger();
  • 或者在啓動Activity時使用am指令,帶上-D參數用於調試:
    adb shell am start -D -n package/MainActivity
接着使用apktool重新打包,並使用jarsigner簽名

安裝apk,開啓調試模式,使用AS進行遠程attach調試

安裝完apk後,如果加入了waitForDebugger方法,則直接啓動app
若是沒有加入,則使用am的debug模式啓動app

啓動完後,打開ddms,查看應用的debug端口號:

如上圖所示,紅色小蜘蛛代表應用等待調試,其中應用進程號爲10747,debug端口號爲8620或者8700(一般用前面那個)

然後我們打開AS,導入我們的反編譯工程後,在相應的smali代碼中打上斷點:


上圖爲在MainActivity的onCreate方法中加入斷點

然後,打開AS的Run -> Edit Configurations,新建remote類型:

選擇attach模式,輸入相應的端口號即可:

調試成功:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章