[Android]反編譯apk + eclipse中調試smali

來源:互聯網
上載者:User

    從來沒有想過反編譯apk是來的如此方便,並且還可以修改後重新編譯運行,這比在win下修改pe容易多了,感謝apktool和smali工具的作者提供這麼好的工具。

 

    跟蹤apk一般的做法是在反編譯的smali代碼中插入log輸出,然後重新編譯運行看輸出日誌,這種方法費時費力,如果能夠Just-in-Time 偵錯是最好的了。搜了一下,目前比較好的方法是使用NetBeans+DDMS。我嘗試過可以調試,但不大認識NetBeans的操作,eclipse估計很多人都會吧,其實設定跟NetBeans大同小異。

    調試步驟:

    1.對apk使用apktool反編譯出可調試的smali代碼到out檔案夾,目前apktool最新的版本是2.0.0b7。

java -jar apktool_2..0b7.jar d -d test.apk -o out

    這裡必須使用-d參數,這樣反編譯出來的代碼尾碼均是java,因為只有java檔案才能被eclipse/netbeans識別調試。

    2.設定調試標記和尋找主類

    在輸出的out檔案夾中,用文本編輯工具開啟AndroidManifest.xml,在application節點中設定屬性android:debuggable="true"。

    繼續在AndroidManifest.xml中,搜尋以下關鍵字

        

                                                                                

    用文本編輯工具開啟主類檔案,找到onCreate方法,,記得添加a=0;//的首碼保持上下一致,結果如下:

a=0;a=0;a=0;a=0; a=0;a=0;a=0; a=0;a=0;a=0;

java -jar apktool_2..0b7.jar b -d out -o debug.apk

    5.對debug.apk簽名(需要下載簽名工具),我把簽名工具放在了signapk檔案夾下,產生debug.sign.apk

java -jar .\signapk\signapk.jar .\signapk\testkey.x509.pem .\signapk\testkey.pk8 .\debug.apk .\debug.sign.apk

    6.上傳debug.sign.apk至手機或模擬器,然後安裝並運行。這時你會看到程式運行後停留在白屏介面,這時不要動裝置和退出程式,因為程式現在是運行到剛才添加的waitForDebugger代碼這裡,這行代碼的意思是一直掛起中,等待調試器。

 

    下面開始設定Just-in-Time 偵錯的環境。

    7.進入第1步產生的out檔案夾,把裡面的build和dist檔案夾刪除,這是apktool編譯apk時產生的。

    8.啟動eclipse,構建java項目

    1) File -> New -> Project -> Java Project -> Next

    2) Project Name隨便起,Use default location選項去掉,Location選擇out檔案夾,然後Next

    3) 把smali檔案夾設為Source Folder,然後Finish

    9.在eclipse中,開啟第2步找到的主類,並找到onCreate方法,在waitForDebugger後面的第一個方法開始添加斷點。如

    10.開啟DDMS(路徑在%android-sdks%\tools\ddms.bat),如果在第6步中運行了修改後的程式,在DDMS的裝置列表中會顯示可以調試的程式。

    對應程式最後一欄為8600/8700,其中8600即為調試該程式的連接埠。

    11.現在要做的就是把代碼與偵錯工具關聯即可。 回到eclipse,配置遠端偵錯

    1) 菜單Run -> Debug -> Debug Configurations

    2) 雙擊Remote Java Application,Host處預設localhost就行,Port填第10步得到的8600,然後Apply -> Debug。

    12.這時eclipse自動切換至debug視圖,並看到程式已經運行並中斷在下一行可執行檔代碼了,相關的變數可以直接查看了。

 

    已經可以用eclipse調試smali了,上面的例子是從程式開頭的地方開始調試,但要調試到自己所關心地方的代碼處確實麻煩。建議先用jd-gui等軟體直接查看反編譯的java代碼,確定要調試的位置後,再進入smali定位斷點並Just-in-Time 偵錯,就可以事半功倍。

    相關工具可以在這裡下載

    apktool: https://code.google.com/p/android-apktool/

    dex2jar: https://code.google.com/p/dex2jar/

    jd-gui: http://jd.benow.ca/

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.