apktool+idea反編譯+調試[轉]

0×03 apktool+ideaphp

正菜來了,apktool 2.0bete9版本推出了-d選項,專門用來重打包apk進行單步調試的,給力!apktool+idea無源碼debug apkstep by step簡直不要太好用,這也是我跟小波請教以後才弄好的,這個選項也是小波等人建議apktool做者這樣作的,不由感嘆一句,波神你爲什麼這麼屌!html

3.1調試基礎java

本小節內容引用自看雪論壇@火翼[CCG]的文章,原文連接:http://www.kanxue.com/bbs/showthread.php?p=1291716android

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

1.apk中的AndroidManifest.xml文件中的Application標籤包含屬性android:debuggable=」true」
2./default.prop中ro.debuggable的值爲1

因爲正常的軟件發佈時都不會把android:debuggable設置爲false(固然也不排除某些很2的應用恰恰就是true),因此要達成條件1須要對app進行從新打包,這不只每次分析一個apk都重複操做,並且不少軟件會對自身進行校驗,重打包後執行會被檢測到,因此想辦法知足第2個條件是個一勞永逸的辦法。app

因爲default.prop是保存在boot.img的ramdisk中,這部分每次從新啓動都會從新從rom中加載,因此要到目的必須修改boot.img中的ramdisk並從新刷到設備中。修改步驟以下(我沒試過,有興趣的倒騰下):eclipse

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)

3.2調試方法ide

這裏咱們仍是用第一種方法來進行測試:工具

1.下載apktool2.0b9版本,下載地址:http://connortumbleson.com/2014/02/06/apktool-2-0-0-beta-9-released/測試

2.使用apktool反編譯apk:

java -jar apktool_2.0.0b9.jar d -d xxx.apk -o out

加上-d選項以後反編譯出的文件後綴爲.java,而不是.smali,每一個.java文件立馬都僞形成了一個類,語句全都是「a=0;」這一句,smali語句成爲註釋,小夥伴們本身看看打開就知道了,作這些都是爲了後面欺騙idea、eclipse、androidstudio這些ide的;

3.加入android:debuggable=」true」選項;

4.重打包apk,必定記得也使用-d選項:

java -jar apktool_2.0.0b9.jar b -d out -o debug.apk

5.對apk進行簽名並安裝apk到調試設備(這個不用我說怎麼操做吧);

6.下載安裝並打開idea,新建一個空的java項目,本例中項目名爲「DebugOnly」,將apk反編譯後的smali目錄下的全部文件拷貝到剛纔新建的java項目的src/目錄下,刷新,如圖6;

圖 6拷貝文件

7.打開androiddevice monitor(終端下敲命令monitor或者ddms),終端下運行命令:adb shell am start -D -n {Package Name}/.{Activity},運行效果如圖7;

圖 7命令運行效果

此時在調試設備上會顯示等待調試器接入:

圖 8調試設備狀態

8.從androiddevice monitor上發現須要調試的程序已經顯示在列表裏面了,記下端口號,本例中爲8700;

圖 9 android device monitor

9. 新建遠程調試:依次點擊run->edit configuration->「+」號->Remote,選中第6步中新建的項目,填寫第8步中得到的端口號,如圖10;

圖 10 debug設置

10.找到相應位置設置斷點(在想設斷點的位置先後多設置幾個斷點),點擊run->debug->unnamed,其中unnamed是第9步中新建的遠程調試的名字;

圖 11遠程調試名字

11.不出意外的話,小夥伴們應該能看到如圖12所示的畫面,恭喜你,已經成功了!此時此刻興奮之情簡直能以言表哈~good luck! have fun! enjoy~

圖 12 idea單步調試apk

0×04後語

另外,阿呆曾經提到一篇文章用jdb遠程調試android程序的文章,連接爲:http://resources.infosecinstitute.com/android-hacking-security-part-6-exploiting-debuggable-android-applications/,我沒有嘗試過,主要是我比較懶,用apktool+idea已經夠用了,就沒去倒騰,有興趣的小夥伴請自行倒騰,別忘了分享!

最後,其實我也不肯定ida是否是真的不能以hex格式顯示變量值,或許是我不會用ida咧;我也不肯定eclipse到底能不能看寄存器的值,單步按鈕和快捷鍵到底能不能用,或許是我eclipse版本的問題咧;我也不肯定android studio到底能不能看到寄存器的值,或許是我android studio版本的問題咧,再或者我用的調試設備有問題咧,再或者個人臉有問題咧……以上問題,若是哪位小夥伴知道怎麼解,跪求告知!

相關文章
相關標籤/搜索