Smalidea無源碼調試android應用

1. 安裝smalidea

https://github.com/JesusFreke/smali/wiki/smalidea
1.1. 進入IntelliJ IDEA/Android Studio開始安裝插件,進入Settings->Plugins點擊Install plugin from disk選中下載好的壓縮包
1.2. apply->restart Android Studio
1.3. 該調試方法的原理
采用 hook 方式達到開啟所有應用調試的目的,xposed 插件代碼如下

public class Debug implements IXposedHookLoadPackage {
 
    public boolean debugApps = true ;
    public static final int DEBUG_ENABLE_DEBUGGER = 0x1;
    public String tag = "IDG";
 
    @Override
    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
 
        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
            protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
 
                int id = 5;
                int flags = (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);
 
            }
        });
    }
 
}

2. 安裝調試工具

2.1 安裝Xposed框架

2.1.1 XposedInstaller下載

http://repo.xposed.info/module/de.robv.android.xposed.installer

2.1.2 安裝XInstaller

  • 在Xposed中下載XInstaller,安裝并激活,重啟系統(tǒng)以啟用XInstaller。
  • 配置XInstaller,啟動專家模式。「其他設置」->勾選「調試應用」

3. 項目設置

3.1. 生成smali文件

java -jar baksmali-x.x.x.jar com.your.app.apk -o proj/yourapp/src

3.2. Android Studio導入項目

  • 啟動Android Studio->File->New->Import Project
  • 選擇上面生成的路徑,選定src的上層目錄
  • 選擇Create Project from existing sources
  • 選擇Make Directory AS->Sources Root
  • File->Project Structure 選擇對應的SDK版本
  • 配置調試選項
    Run->Edit Configurations
    +」 -> Remote -> Port:8700

4. 開始調試

4.1 方法一:使用DDMS進行調試

真機

  1. 勾選USB調試
  2. 勾選USB調試通知
  3. 在開發(fā)者選項中->選擇調試的應用->選擇你要調試的程序->勾選等待調試器
  4. 啟動程序,程序會停在等待調試器界面
    此時ddms可以看到進程的端口號8700

Android Studio中對代碼下好斷點->Run->Debug->Remote即可開始調試
Console控制臺輸出
Connected to the target VM, address: 'localhost:8700', transport: 'socket'

4.2 方法二:使用adb調試

AndroidManifest.xml得到主Activity如下:
com.your.app.MainActivity

調試啟動目標程序
adb shell am start -D -W -n com.your.app/.MainActivity

設置端口轉發(fā)
adb shell ps | grep your.app
adb forward tcp:8700 jdwp:xxxxx

寄存器

Register | | Value
--- |---
v0 | | 第一個本地寄存器
v1 | | 第二個本地寄存器
v2 |p0 | this
v3 | p1 | 第一個參數
v4 | p2 | 第二個參數
v5 | p3 | 第三個參數

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容