AS無源碼調試APK


AS無源碼調試APK

https://www.usmacd.com/2020/03/19/apk_debug/

 

Apk無源碼調試的方法有很多,現在發現使用Android Studio 結合 JEB 感覺良好,
主要是參考 http://www.jianshu.com/p/c7899e5ea182 這篇記錄下了具體步驟。

1. 下載 smalidea

https://bitbucket.org/JesusFreke/smali/downloads/smalidea-0.03.zip

在Android studio的插件倉庫中沒有找到這個插件,需要下載本地安裝
File -> Settings -> Plugins -> Install plugin from disk 選擇下載的插件,重啟后生效。

2. apktool 輸出源碼文件

https://github.com/iBotPeaches/Apktool/releases/download/2.2.0/apktool_2.2.0.jar

1
java -jar apktool_2.2.0.jar d -f xx.apk -o xx

如果正常的將輸出 smali 源碼文件

3. Android Studio 導入源碼

File -> New -> import project 選擇剛才導出的xx文件夾

4. 增加Android Stuido的調試選項

Android Studio 界面上選擇 Run-> Edit Configurations,點擊+號,新建remote類型調試
器,默認的監聽端口為5005,如果默認端口被占用則需要修改端口號。

5. 以調試模式啟動應用

1
adb shell am start -D -n aa.bb/.activity

進程將掛起,aa.bb是package name,.activity 是要啟動的activity 一般指定MainAcvitiy即可

6. 建立調試通道

1
adb shell ps | grep aa.bb

獲得調試進程的pid

1
adb forward tcp:5005 jdwp:debug_process_pid

執行命令后,可以看到adb監聽本地5005 端口。

1
2
> netstat -antp | grep 5005
tcp 0 0 127.0.0.1:5005 0.0.0.0:* LISTEN 4728/adb

7. 設置斷點,調試

點擊源碼左側欄可以設置斷點,點擊工具欄上的debug (一個小蟲的按鈕),開始調試。在
這個步驟上我遇上了一個錯誤。

java.io.IOException “handshake failed - connection prematurally closed”

這個錯誤是因為adb版本問題,取消Android內部的adb集成就可以了。具體方法是
Tools -> Android -> Enable adb integration 取消掉前面的勾就可以了。

如果看到Connected to the target VM, address: ‘localhost:5005’, transport: ‘socket’ 就大功告成了。

8. 其他一些說明事項

要調試apk程序是有一些要求的,下面幾種情況可以調試apk程序。

  • /default.prop ro.debuggable=1

我的手機就屬於這種情況

1
2
getprop  | grep ro.debug
[ro.debuggable]: [1]
  • APK 中AndroidManifest.xml 有這句 android:debuggable=true

 

=================== End

 


免責聲明!

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



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