前言
apk在混淆了之後我們通過靜態分析有時候是遠遠不夠的,就需要動態除錯smali語言了,在以前我們用的都是eclipse配合apktool動態除錯apk,如今android studio如此普及,我們可以用IDEA除錯。
準備的工具
- idea 14 下載地址:pan.baidu.com/s/1eR2npfG 密碼: va9p
- smalidea-0.03.zip 下載地址
- apktools
- 我的mytestapp 下載地址
注意:idea推薦用14,不推薦用最新的android studio,因為本人測試,最新的android studio裝上smalidea0.03後打不上斷點
準備打出可除錯的apk
使用apktools拆包,執行命令
apktool d mytestapp.apk
複製程式碼
然後我們進入mytestapp資料夾,編輯AndroidManifest.xml,在Application標籤裡面加上android:debuggable="true"
,這樣我們再回編譯的時候就可以除錯了,由於我的apk是debug版本所以會預設帶
修改完之後我們執行指令回編譯,如圖
apktool b mytestapp
複製程式碼
執行完成我們進入mytestappdist資料夾,對我們編譯好的檔案進行簽名,把我的簽名檔案MartinHan.jks (下載地址) 拷貝到當前資料夾,密碼輸入:111111。
然後安裝簽名後app到手機
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore "MartinHan.jks" -signedjar _signed.apk "mytestapp.apk" "111111"
adb install _signed.apk
複製程式碼
正確配置IDEA,安裝smalidea外掛,準備除錯
我們安裝好IDEA,然後準備安裝smalidea外掛 File -> Settings -> Plugins
然後點選 Install plugin from disk 如圖
然後安裝完成了之後我們重啟IDEA。編譯器就配置好了
開始配置動態除錯
我們開啟IDEA,File -> Open,然後選擇我們mytestapp資料夾,就是我們執行apktool d mytestapp後生成的資料夾。
點選OK,用IDEA將這個資料夾當成一個專案開啟。
點選Run -> Edit Configurations 開啟如圖所示對話方塊,點選綠色加號,選擇Remote
接下來把埠改成8700,如圖
點選ok確定,遠端除錯我們就配置好了,動手開始除錯。
開始除錯
我們首先在手機端開啟mytestapp,如圖
開啟ddms我們就看到回編譯的程式了,並且是可調式狀態,我們滑鼠選中這個程式
然後我們點選IDEA的除錯,按鈕,如圖
然後我們的IDEA出現了連線上了,表示現在已經可以動態除錯了
打斷點,單步除錯
根據靜態分析,我們分析到了MainActivity$1的onClick方法就是我們點選Button以後觸發的事件,我們打好斷點,我在MainActivity$1的第54行打好斷點,如圖
此時我們點選Button,發現斷點斷到了這裡,如圖
至此,用IDEA動態除錯android apk成功
寫在結尾
這個apk是我寫的一個apk,在真正的動態除錯中,很有可能,開發人員在程式中加入了檢測偵錯程式的程式碼,還需要自己鑑別程式碼,並且註釋掉,或者更改掉。
還有的apk進行了加殼,需要首先脫殼。
關於我
個人部落格:MartinHan的小站
部落格網站:hanhan12312的專欄
知乎:MartinHan01