標籤:smalidea smalidea外掛程式 android
smalidea是一款 IntelliJ IDEA/Android Studio的 smali 外掛程式
已有功能
- 文法高亮/錯誤提示
- 位元組碼層級調試
- 斷點
- 單步調試
- 寄存器查看
- 本地視窗 java 文法支援,debug 模式下同樣支援
- 支援跳轉,方便追蹤變數/函數/類.(Xref也支援)
- 尋找用法
- 重新命名
- 從 java 代碼引用 smali 類
- 錯誤反饋...
安裝
- 下載外掛程式smalidea
- 進入IntelliJ IDEA/Android Studio開始安裝外掛程式,進入Settings->Plugins點擊
Install plugin from disk選中下載好的壓縮包.
- 點擊
apply
開啟應用調試
要調試一個apk裡面的dex代碼,必須滿足以下兩個條件中的任何一個:
- apk中的AndroidManifest.xml檔案中的Application標籤包含屬性android:debuggable=”true”
- /default.prop中ro.debuggable的值為1
可選方案:
- apktool 反編譯app 後在AndroidManifest.xml檔案中插入android:debuggable=”true”
- hook system debug (Xinstaller)
- 修改boot.img
個人覺得改 boot.img和二次打包比較麻煩,所以這裡採用 hook 方式達到開啟所有應用調試的目的,xposed 外掛程式代碼如下
| 123456789101112131415161718192021222324252627282930313233343536373839 |
publicclass Debug implements IXposedHookLoadPackage { publicboolean debugApps = true ; publicstatic final int DEBUG_ENABLE_DEBUGGER = 0x1; publicString tag = "IDG"; @Override publicvoid handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throwsThrowable { if(lpparam.appInfo ==null || (lpparam.appInfo.flags & (ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_UPDATED_SYSTEM_APP)) !=0){ return; } tag = tag + lpparam.packageName; XposedBridge.hookAllMethods(Process.class,"start",new XC_MethodHook() { @Override protectedvoid beforeHookedMethod(MethodHookParam param) throwsThrowable { intid = 5; intflags = (Integer) param.args[id]; Log.d(tag,"flags is : "+flags); if(debugApps) { if((flags & DEBUG_ENABLE_DEBUGGER) == 0) { flags |= DEBUG_ENABLE_DEBUGGER; } } param.args[id] = flags; Log.d(tag,"flags changed : "+flags); } }); } } |
效果如
如果遇到如下錯誤
Adb rejected connection to client
可以使用重啟 adb server 來解決
adb kill-serveradb start-server
調試應用
注意:IDEA 14.1及以上版本才支援單步調試
使用 baksmali 反編譯應用
baksmali myapp.apk -o ~/projects/myapp/src
轉到 IDEA 中,匯入新工程,選中之前的目錄
~/projects/myapp
匯入時選擇Create project from existing sources
成功匯入工程後右鍵點擊 src 目錄,設定Mark Directory As->Sources Root
開啟Module setting設定對應的 JDK
安裝debug應用
adb install com.zkj.guimi.apk
找到debug應用進程,啟動應用
如果不用 ddms 可以使用如下步驟:
? adb shell am start -D -W -n com.zkj.guimi/.ui.SplashScreen? adb shell ps |grep guimi 1 ?u0_a157 9879 242 883420 36360 ffffffff 00000000 S com.zkj.guimi? adb forward tcp:8700 jdwp:9879
在 IDEA 配置遠端偵錯(Run->Edit Configurations),更改debug連接埠為8700
Run->Debug
Connected to the target VM, address: ‘localhost:8700‘, transport: ‘socket‘
斷點觸發後就可以單步調試
reference
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
Smalidea無源碼調試 android 應用