Android逆向之路—IDEA動態除錯smali語言

MartinHan發表於2019-03-04

前言

apk在混淆了之後我們通過靜態分析有時候是遠遠不夠的,就需要動態除錯smali語言了,在以前我們用的都是eclipse配合apktool動態除錯apk,如今android studio如此普及,我們可以用IDEA除錯。

準備的工具

注意: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

相關文章