背景
在对某加固应用开发xp模块中,发现模拟器环境下生效,到了真机环境无论怎么设置都不生效的问题。
原因
handleLoadPackage方法调用时,应用的类可能还没装载进虚拟机。
方案
- 方法一
hook loadClass方法,但可能你的目标类没有列出来,(loadClass不一定把所有类加载)
所以选择目标类加载后的某一个类,hook 此类 ,再hook目标类。
XposedBridge.hookAllMethods(ClassLoader.class, "loadClass", new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
super.afterHookedMethod(param);
String className= (String) param.args[0];
Log.i(tag,"类名:"+className);
XposedBridge.log("类名:"+className);
final String hookClassName="com.xxx"
if(!className.equals(hookClassName))return;
Class clz = (Class) param.getResult();
ClassLoader loader = clz.getClassLoader();
hookVIP1(loader);
}
});
-
方法二
hook newActivityXposedHelpers.findAndHookMethod("android.app.Instrumentation", lpparam.classLoader, "newActivity", ClassLoader.class, String.class, Intent.class, new XC_MethodHook() { @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { super.afterHookedMethod(param); hookVIP1(lpparam.classLoader"); } });