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

这篇具有很好参考价值的文章主要介绍了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的所有构造器

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

 文章来源地址https://www.toymoban.com/news/detail-402520.html

到了这里,关于Xposed Hook不到类报错以及Xposed的Hook方法讲解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包