利用IDA6.6進行apk dex代碼動態調試


網上公開IDA6.6已經有一段時間,這個版本有個好處就是可以動態調試java代碼。正好現在需要動態調試,所以順便練習一下。

根據android的官方文檔,如果要調試一個apk里面的dex代碼,必須滿足以下兩個條件中的任何一個:

1.apk中的AndroidManifest.xml文件中的Application標簽包含屬性android:debuggable=”true”

2./default.prop中ro.debuggable的值為1

由於一般軟件發布時都會把android:debuggable設置為false,所以要達成條件1需要反編譯原apk,修改AndroidManifest.xml並進行重新打包,這樣不僅麻煩,而且很多軟件進行了加固,要破解很難。所以想辦法滿足第2個條件是個一勞永逸的辦法。

由於default.prop是保存在boot.img的ramdisk中,這部分每次重新啟動都會重新從rom中加載,所以要到目的必須修改boot.img中的ramdisk並重新刷到設備中。修改步驟如下:

1.從Google官方網站下載到boot.img

2.使用工具(abootimg,gunzip, cpio)把boot.img完全解開,獲取到default.prop

3.修改default.prop

4.把修改后的文件重新打包成boot_new.img

5.使用fastboot工具把boot_new.img刷入設備(fastboot flash boot boot_new.img)

具體可參考:http://www.cnblogs.com/goodhacker/p/4106139.html

由於我們這篇文章的重點是如何動態調試dex代碼,所以我們就假設該dex是可調試的。

1.用ida打開apk文件,選擇dex文件進行加載
2.設置debugger選項,Debugger->Debugger options->Set specific options,按如圖1所示進行設置(adb路徑也要設置),然后一路確定返回
3.找到要下斷點的位置,光標移到要下斷點的那一行,按f2下斷點
4.手機開啟調試選項,連接到電腦,運行apk
5.選中IDA pro窗口,按f9運行,如果出現如圖2的畫面,就說明設置成功,可以進行動態調試了。

圖1 調試設置 

圖2 調試界面

如何查看寄存器的值呢?選中ida->debugger->use source level debugger,然后點擊ida->debugger->debugger windows->locals打開本地變量窗口,就可以查看寄存器的值了。

如果變量的值出現“Bad type”的情況,如下圖所示:

可以按下述步驟解決:

點擊“Debugger->Debugger windows->Watch view”,會彈出“Watch view”窗口:

然后在Watch view窗口中右擊,選擇“Add watch”:

然后在彈出的窗口中自己為變量添加一個類型,類似這樣:

(Object*)v0
(String)v0
(char*)v0
(int)v0

假設我們要設置v0寄存器值的類型為String類型,就在在彈出的對話框中輸入(String)v0,點擊“OK”就可以在Watch view窗口中看到變量值了。

注意:如果運行過程中一直顯示如圖3所示窗口,就需要關注一下你的手機屏幕,看是否是需要與用戶進行交互了。

圖3

參考文章:http://www.joenchen.com/archives/1196


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM