Xposed Hook Apk不在classes.dex中定义的类
一直在论坛学习,学到了很多知识,今天也和大家分享一下。逛论坛的时候,看到很多Xposed新手询问类似以下的问题:
[*]为什么某个类明明存在却Hook不到,出现异常ClassNotFoundError?
[*]怎么Hook MultiDex中的类?
[*]xposed怎么hook一个主dex加载的jar(包含dex)?
[*]怎么Hook被加壳隐藏的类?
[*].....
还有看到有大神在脱壳的时候,通过Hook Application的attach/onCreate/......等方法获取到加壳的DexClassLoader,然后再去Hook某个类。
其实都不必绕那么多的圈子,来完成Hook。
Hook一个类,我们不要关心这个类在哪个DexClassLoader中;因为在Xposed模块加载的时候,Apk应用程序的类都没有加载,通过哪个DexClassLoader加载,我们也不知道。
我们知道的是,所有的类都是通过ClassLoader的loadClass方法加载的。我们只需要Hook loadClass方法,就能得到所有的类(除非该方法被重写:keai)。
我们直接上代码,其中classes是我们定义的一个List/Set对象,具体怎么用,看你自己的需求。
findAndHookMethod(ClassLoader.class, "loadClass", String.class, new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
if (param.hasThrowable()) return;
String classname = (String) param.args[0];
if (classes.contains(classname)) {
Logger.info("hook class: " + classname);
Class<?> clazz = (Class<?>) param.getResult();
findAndHookMethod(clazz, "methodName", paramTypes, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
// TODO:
}
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
// TODO:
}
});
}
}
});
可以动手测试一下。
懒汉可以查看Github链接:https://github.com/fooree/fooXposed/tree/master/Foox_05th。 我hook 到 A 类, A类里面有import b , 然后我通过 hook 到 A, 用A 的 class loader加载 类 b. 现在的问题是 mac 上模拟器跑没问题, windows 上就有问题, class not found 类b , 还望哪位大神和我讨论下。 看问题大概在哪里? 难道是mac 上dex 路径,和windows 上不同? JDragons 发表于 2018-3-14 16:08
好思路,回头试一下,感觉可以通杀了
目前为止,使用这种方法,还没有遇到问题。在我看来还是存在潜在的问题,因为如果参数类型和当前类不再一个DexClassLoader中,预计会出现问题 hook是什么??{:1_907:} longhong 发表于 2018-3-14 12:35
hook是什么??
这个怨我{:1_896:} {:1_921:}赞,谢谢分享! 赞{:1_921:}
虽然看不懂{:1_909:} 好思路,回头试一下,感觉可以通杀了 不错,学习了! 感谢楼主分享 小白完全看不懂现在只想 MIUI8.0赶紧适配 {:1_907:}看不懂,,,
页:
[1]
2