Xposed Hook不到类报错以及Xposed的Hook方法讲解

有时候XposedHook会报错,提示找不到类,这个是因为,hook的那个类是其他classloader加载的,这个时候,就需要先hook Application.class下的attach方法,拿到每个ClassLoader,然后再用这个ClassLoder尝试加载自己的目标类,如果成功加载了,那说明这个类就是该classLoader加载的,然后再进行hook

代码如下:

XposedHelpers.findAndHookMethod(Application.class, "attach", Context.class, new XC_MethodHook() {
            @Override
            protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                super.afterHookedMethod(param);
                mContext = (Context) param.args[0];
                classLoader = mContext.getClassLoader();
                Class<?> w;
                Class<?> webtoonViewerActivity;
                Log.i(TAG,"拿到classLoader");
                try {
                    //你的目标
                    w = classLoader.loadClass("xxx.xxx");
                    webtoonViewerActivity =                 classLoader.loadClass("com.naver.linewebtoon.episode.viewer.WebtoonViewerActivity");
                }catch (Exception  e) {
                    Log.i(TAG, "寻找com.naver.linewebtoon.auth.w报错", e);
                    return;
                }
                //这样就不会报错了
                XposedBridge.hookMethod(w.getMethod("m"), new XC_MethodHook() {
                    @Override
                    protected void afterHookedMethod(MethodHookParam param) throws           Throwable {
                        Log.i(TAG,"hook到了m方法");
                        super.afterHookedMethod(param);
                        param.setResult(true);
                    }
                });

               
           }
}

接下来就顺便介绍一下Xposed的用的比较多的Hook方法

Xposed的hook方式有很多种,上面代码只是其中一种API,Xposed提供了两个类,这两个类都能实现Hook

第一个类:XposedHelpers

这个类有多个重载方法,第一种是可以直接提供类名,然后第二个参数是一个classLoader,第三个参数是一个可变参数,如果方法有参数,可以提供形参的class对象,第三个是一个回调

XposedHelpers.findAndHookMethod("xxx.xxx.xx", classLoader, "func", new XC_MethodHook() {
            @Override
            protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                //这个里是方法执行前的的回调,这个parame是方法的参数

                super.beforeHookedMethod(param);
                param.setResult(true);//可以修改返回值
            }

            @Override
            protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                //这个里是方法执行后的的回调。和上面没啥区别

                super.afterHookedMethod(param);
            }
        });
    }

如果想要hook类的构造方法,也提供了接口:

findAndHookConstructor这个类可以hook构造方法

上面说了 除了XposedHelpers之外还提供了一个hook类 :XposedBridge

这个类提供了3个hook接口,第一个是可以根据一个method对象来hook,

第二个是提供一个class对象来hook这个方法的所有重载

第三个是hook一个class的所有构造器

 

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Xposed Hook 是一种 Android 应用程序开发技术,它允许开发人员在不修改应用程序源代码的情况下,在运行时修改应用程序的行为。这是通过在系统运行时加载一个模块来实现的,该模块可以修改应用程序的 Java 方法Xposed Hook 是一种高级技术,适用于高级 Android 开发人员。 ### 回答2: Xposed Hook是针对Android操作系统的一种插件框架,可以通过它来实现对系统和应用程序的修改和增强。这种框架可以修改应用程序的行为、功能和外观,也可以增加一些新功能,使得应用程序更加强大、灵活和个性化,更能满足用户的需求。 Xposed Hook使用的是Java语言,需要在Android设备上安装特定的模块,然后通过Xposed框架来实现对Android系统和应用程序的Hook。通过Hook技术,可以拦截Android系统和应用程序中的方法调用,从而实现对它们的修改和增强。 Xposed Hook可以实现的功能包括但不限于:界面美化,垃圾清理,定制化ROM,增强应用程序的功能,添加新功能,反禁止操作等等。通过这些功能,用户可以轻松地定制自己的Android设备,使它更加适合自己的使用习惯。 Xposed Hook需要注意的是,由于其操作会修改系统和应用程序的行为,存在风险,需要谨慎操作。此外,在某些设备上安装Xposed Hook可能会导致系统不稳定或无法正常启动,因此使用前需要对其风险有充分的了解和准备,以避免出现意外情况。 总之,Xposed Hook是一种非常有用的技术,对于那些想要个性化定制自己的Android设备的用户来说,是一个非常好的选择。但是,在使用Xposed Hook的过程中要格外谨慎,避免出现不必要的问题。 ### 回答3: Xposed hook是一种基于Xposed框架进行开发的模块,它通过劫持Android系统的核心模块,在不需修改系统源码的情况下实现对系统的修改和扩展。 Xposed框架是一个在安卓系统上的插件框架,它可以通过在系统加载应用前,加载修改器模块的方式来实现对系统的修改。而Xposed hook就是在这个框架的基础上,将底层系统API的使用权转换给修改器模块,从而实现对系统行为的定制化。 Xposed hook的实现方式是通过钩子(Hook)技术实现的,即通过在API调用点上添加Hook代码,以监听并修改系统行为。这种方式不仅可以在不修改系统源码的情况下扩展和修改系统行为,而且可以在运行时实时修改,不需要重新编译代码。 使用Xposed hook可以实现很多有趣有用的功能,比如修改应用行为、禁止广告、增加新功能等等。Xposed hook也可以帮助开发者更方便地进行调试和代码编写,减少工作量和提高效率。 然而,Xposed hook并非完美无缺,它也存在着一些安全问题,比如恶意软件可以借助这个技术实现对用户的监控、篡改、盗取等行为。因此,用户需要谨慎选择和使用Xposed hook模块,并且需要注意安全风险。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值