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可以動態調試了。

 

 

 

     

   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM