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

網上公開IDA6.6已經有一段時間,這個版本有個好處就是能夠動態調試java代碼。正好如今須要動態調試,因此順便練習一下。html

根據android的官方文檔,若是要調試一個apk裏面的dex代碼,必須知足如下兩個條件中的任何一個:java

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

2./default.prop中ro.debuggable的值爲1windows

因爲通常軟件發佈時都會把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.htmlspa

因爲咱們這篇文章的重點是如何動態調試dex代碼,因此咱們就假設該dex是可調試的。debug

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 調試界面code

如何查看寄存器的值呢?選中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

相關文章
相關標籤/搜索