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,安装并激活,重启系统以启用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. 在开发者选项中->选择调试的应用->选择你要调试的程序->勾选等待调试器
  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

设置端口转发
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 | 第三个参数

你可能感兴趣的:(Smalidea无源码调试android应用)