1. 程式人生 > >Android逆向 Android Studio動態除錯smali程式碼

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可以動態除錯了。