无需重新编译应用程序,用户便可以使用xposed调试/堆转储应用程序,从而使应用程序可调试
是否有任何方法(root用户或非root用户)来检测应用程序当前是否为:
或者
或者
使用
BuildConfig.DEBUG
和ApplicationInfo
,并检查flags字段是否FLAG_DEBUGGABLE
不起作用,因为该应用程序是由zygote直接使用调试标志启动的
下面是钩住进程类的代码
try {
Method start = Process.class.getMethod(
"start", String.class, String.class, Integer.TYPE, Integer.TYPE, int[].class,
Integer.TYPE, Integer.TYPE, Integer.TYPE, String.class, String[].class);
XposedBridge.log("start hook, appInfo: " + loadPackageParam.appInfo);
XposedBridge.hookMethod(start, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam methodHookParam) throws Throwable {
int id = 5;
int flags = (Integer) methodHookParam.args[id];
if ((flags & 0x1) == 0) {
flags |= 0x1;
}
methodHookParam.args[id] = flags;
}
}
});
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
在安装了Xposed的设备上,您无法阻止任何事情,也不能依赖您的应用程序在Java / dex代码中处理的任何数据。Xposed可以修改任何内容。
因此,唯一的方法是通过添加本机代码来加强您的应用程序,这些本机代码将阻止在安装了Xposed的设备上执行。好的强化框架也使附加调试器非常困难/几乎不可能。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句