设置Android调试开关的方法

在进行Android应用逆向分析的时候,让目标应用处于调试状态能极大的增加效率,能够完成如下功能:

  • 动态调试
  • 使用DDMS、Android Profiler进行分析
  • 优化Logcat输出,因为当应用处于调试状态时,logcat包含包名

开启调试开关的方法有:

  • 修改AndroidManifest.xml文件
  • 使用Xposed插件,修改启动参数
  • 修改系统的ro.debuggable属性

修改AndroidManifest.xml文件不推荐使用,不仅效率低下,而且越来多的应用加入完整性校验(甚至包括服务端完整性校验)后,还需要增加额外的时间成本完成这一简单的修改。尽管绕过完整性校验的方法并不难。

在能够安装、运行Xposed Framework的手机上,使用Xposed模块修改启动参数,是过去几年用的最多的方法,如XInstallerXDebug等模块,其原理如下:

    private XC_MethodHook debugAppsHook = new XC_MethodHook() {
        @Override
        protected void beforeHookedMethod(MethodHookParam param)
                throws Throwable {
            XposedBridge.log("-- beforeHookedMethod :" + param.args[1]);
            int id = 5;
            int flags = (Integer) param.args[id];
            if ((flags & DEBUG_ENABLE_DEBUGGER) == 0) {
                flags |= DEBUG_ENABLE_DEBUGGER;
            }
            param.args[id] = flags;
            if (BuildConfig.DEBUG) {
                XposedBridge.log("-- app debugable flags to 1 :" + param.args[1]);
            }
        }
    };

    @Override
    public void initZygote(final IXposedHookZygoteInit.StartupParam startupParam) throws Throwable {
        XposedBridge.hookAllMethods(Process.class, "start", debugAppsHook);
    }

对于无法运行Xposed Framework的机器,则需要设置ro.debuggable调试模式的全局开关。由于ro.debuggable位于default.prop中,而default.prop实际处于boot.img内,启动的时候通过映射的方式挂在到ramdisk中。因此,需要修改ro.debuggable需要对修改boot.img,十分繁琐,且通用性和可操作性都很低。

当然,现在设置default.prop用Maigsk就可以很好的解决。但由于Magisk自带的MagiskHide功能开启后,会强制将ro.debuggable设置为0。所以,在Magisk下开启MaigskHide并且设置ro.debuggable,需要完成以下步骤:

  1. 安装MagiskHide Props Config
  2. 安装Busybox for Android NDK
  3. 重启机器;
  4. 进入adb shell,运行props进行设置即可。

发表评论