好友
阅读权限 10
听众
最后登录 1970-1-1
一直在论坛学习,学到了很多知识,今天也和大家分享一下。
逛论坛的时候,看到很多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方法,就能得到所有的类(除非该方法被重写 )。
我们直接上代码,其中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。
免费评分
查看全部评分
发帖前要善用【论坛搜索 】 功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。