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

逛论坛的时候,看到很多Xposed新手询问类似以下的问题:

  1. 为什么某个类明明存在却Hook不到,出现异常ClassNotFoundError?
  2. 怎么Hook MultiDex中的类?
  3. xposed怎么hook一个主dex加载的jar(包含dex)?
  4. 怎么Hook被加壳隐藏的类?
  5. .....

还有看到有大神在脱壳的时候,通过Hook Application的attach/onCreate/......等方法获取到加壳的DexClassLoader,然后再去Hook某个类。

其实都不必绕那么多的圈子,来完成Hook。

Hook一个类,我们不要关心这个类在哪个DexClassLoader中;因为在Xposed模块加载的时候,Apk应用程序的类都没有加载,通过哪个DexClassLoader加载,我们也不知道。

我们知道的是,所有的类都是通过ClassLoader的loadClass方法加载的。我们只需要Hook loadClass方法,就能得到所有的类(除非该方法被重写

)。

我们直接上代码,其中classes是我们定义的一个List/Set对象,具体怎么用,看你自己的需求。

 // 第一步:Hook方法ClassLoader#loadClass(String)
        findAndHookMethod(ClassLoader.class, "loadClass", String.class, new XC_MethodHook() {
            @Override
            protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                if (param.hasThrowable()) return;
                Class<?> cls = (Class<?>) param.getResult();
                String name = cls.getName();
                if (classes.contains(name)) {
                    // 所有的类都是通过loadClass方法加载的
                    // 所以这里通过判断全限定类名,查找到目标类
                    // 第二步:Hook目标方法
                    findAndHookMethod(cls, "methodName", paramTypes, new XC_MethodHook() {
                        @Override
                        protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                            // TODO
                        }
 
                        @Override
                        protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                            // TODO
                        }
                    });
                }
            }
        });

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值