吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 9221|回复: 18
收起左侧

[Android 分享] Xposed Hook Apk不在classes.dex中定义的类

[复制链接]
fooree 发表于 2018-3-14 10:13
一直在论坛学习,学到了很多知识,今天也和大家分享一下。
逛论坛的时候,看到很多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。

免费评分

参与人数 3吾爱币 +7 热心值 +3 收起 理由
JDragons + 1 + 1 我很赞同!
Probious + 1 我很赞同!
qtfreet00 + 6 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

rain_renxiaoxu 发表于 2018-7-26 17:31
我hook 到 A 类, A类里面有import b ,   然后我通过 hook 到 A, 用A 的 class loader  加载 类 b.     现在的问题是 mac 上模拟器跑没问题, windows 上就有问题, class not found 类b , 还望哪位大神和我讨论下。 看问题大概在哪里?   难道是mac 上dex 路径,和windows 上不同?
 楼主| fooree 发表于 2018-3-15 09:40
JDragons 发表于 2018-3-14 16:08
好思路,回头试一下,感觉可以通杀了

目前为止,使用这种方法,还没有遇到问题。在我看来还是存在潜在的问题,因为如果参数类型和当前类不再一个DexClassLoader中,预计会出现问题
longhong 发表于 2018-3-14 12:35
 楼主| fooree 发表于 2018-3-14 13:30

这个怨我
louis_ck 发表于 2018-3-14 14:48
赞,谢谢分享!
Probious 发表于 2018-3-14 15:59


虽然看不懂
JDragons 发表于 2018-3-14 16:08
好思路,回头试一下,感觉可以通杀了
psp7456 发表于 2018-3-14 16:24
不错,学习了!
都同学 发表于 2018-3-14 16:25
感谢楼主分享
啊~旺 发表于 2018-3-14 16:58
小白  完全看不懂  现在只想 MIUI8.0赶紧适配
By波爷 发表于 2018-3-14 18:33
看不懂,,,
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-28 12:58

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表