Android逆向 Android Studio動態除錯smali程式碼
工具:
Android Studio版本: 3.0.1
smalidea外掛: https://github.com/JesusFreke/smali/wiki/smalidea。
反編譯工具:本節先用Android Killer,後面介紹apktool。
一 配置外掛
下載smalidea外掛,然後打卡Android Studio,點選File->Setting->Plugins->Install plugin from disk,選擇下載的smalidea.zip檔案,安裝成功後顯示重啟Android Studio生效。
二 反編譯apk
把第一節編寫的啟用碼程式apk拖入Android Killer中
1 記錄apk的包名(com.jhm)和入口Activity(com.jhm.MainActivity)
2 設定該apk的除錯屬性,改成可除錯:AndroidManifest.xml中application標籤中設定android:debuggable="true" (不改是不能除錯apk的)
三 手機準備
1 修改完除錯屬性後在Android Killer裡,點選Android->編譯,成功後生成apk,把這個可除錯的apk安裝到手機,手機連線電腦開啟usb除錯。
2 命令列中輸入adb shell am start -D -n com.jhm/com.jhm.MainActivity。 開啟入口Activity。如圖:
四 轉發埠
1 Android Studio中點選Tools->Android->Android Device Monitor,如圖,監視器監聽到了我們的程式com.jhm。
看到,Online值是23635,埠值是8700,記錄下,關閉Android Device Monitor。(不要關閉手機裡的程式,重新開啟後Online值會變的,需要重新轉發埠)
2 開啟命令列,輸入命令轉發埠
輸入adb forward tcp:埠值 jdwp:Online值,即adb forward tcp:8700 jdwp:23635,結果如圖:
說明8700埠被佔用了,查詢對應的是哪個程序關掉就可以了。
①命令列輸入netstat -ano | findstr "8700",回車
,被1220佔用了
②查詢1220對應的是哪個程序,命令列輸入tasklist | findstr "1220",回車
看到是studio64.exe,在工作管理員關閉即可。
佔用8700埠的程序關掉了,重新命令列輸入adb forward tcp:8700 jdwp:23635,回車即可轉發成功。
五 匯入smali工程
1 AndroidKiller反編譯完成後,點選工程管理器標籤頁->右擊smali目錄->開啟方式->開啟檔案路徑,在E盤新建Jhm資料夾,把smali資料夾拷貝到Jhm資料夾下,並且重新命名smali資料夾為src。
2 Android Studio中點選File->New->Import Project,找到E:\Jhm路徑,選中Jhm檔案,點選Next一路到Finish。
2 在AndroidStudio開啟的新工程裡選擇瀏覽模式為Project格式,右擊src->Make Directory As->Sources Root設定為根目錄。
六 配置遠端除錯選項
在Android Studio中點選Run->Edit Configurations。點選左上角綠色加號->Remote,Name設定為DebugSmali吧,埠Port設定為8700,點選OK。
七 配置JDK
Android Studio中點選File->Project Structure,選中對應java版本,點選ok。
八 開始除錯
1 找到MainActivity, 下幾個斷點。
2 在Android Studio中點選Run->Debug ‘DebugSmali’,此時程式跑起來,如圖:
輸入啟用碼,點選驗證,程式斷在我們的斷點處,F8單步步過,F7單步步入,F9往下執行。OK可以動態除錯了。