Smalidea無源碼調試 android 應用

來源:互聯網
上載者:User

標籤: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 應用

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.