xposed hook 4种姿势

一、XposedHelpers

public void hooktestXposedHelpers(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
        if (lpparam.packageName.equals(wechatPackageName)) {
            XposedBridge.log(TAG + "开始hook WeChat hooktestXposedHelpers5");
            XposedHelpers.findAndHookMethod(
                    "com.tencent.mm.appbrand.commonjni.AppBrandJsBridgeBinding",
                    lpparam.classLoader,
                    "nativeInvokeHandler",
                    String.class,
                    String.class,
                    int.class,
                    boolean.class,
                    new XC_MethodHook() {
                        @Override
                        protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                            super.afterHookedMethod(param);
                            XposedBridge.log(TAG + "hook该方法成功 hooktestXposedHelpers");
                        }
                    }
            );

        }

    }

二、XposedBridge

public void hooktestXposedBridge(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
        if (lpparam.packageName.equals(wechatPackageName)) {
            XposedBridge.log(TAG + "开始hook WeChat hooktestXposedBridge");
            Class<?> w = lpparam.classLoader.loadClass("com.tencent.mm.appbrand.commonjni.AppBrandJsBridgeBinding");
            XposedBridge.hookMethod(w.getMethod("nativeInvokeHandler"), new XC_MethodHook() {
                @Override
                protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                    super.afterHookedMethod(param);
                    XposedBridge.log(TAG + "hook该方法成功 hooktestXposedBridge");
                }
            });

        }

    }

三、多DEX

public void hooktestattach(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
        if (lpparam.packageName.equals(wechatPackageName)) {
            XposedBridge.log(TAG + "开始hook WeChat hooktestattach");
            XposedHelpers.findAndHookMethod(Application.class, "attach", Context.class, new XC_MethodHook() {
                @Override
                protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                    super.afterHookedMethod(param);
                    Context mContext = (Context) param.args[0];
                    ClassLoader classLoader = mContext.getClassLoader();
                    Class<?> w;
                    try {
                        w = classLoader.loadClass("com.tencent.mm.appbrand.commonjni.AppBrandJsBridgeBinding");
                    } catch (Exception e) {
                        XposedBridge.log(TAG + "loadClass err hooktestattach");
                        return;
                    }
                    XposedBridge.hookMethod(w.getMethod("nativeInvokeHandler"), new XC_MethodHook() {
                        @Override
                        protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                            super.afterHookedMethod(param);
                            XposedBridge.log(TAG + "hook该方法成功 hooktestattach");
                        }
                    });
                }
            });
        }
    }

四、动态加载

public void hooktestloadClass(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
        if (lpparam.packageName.equals(wechatPackageName)) {
            XposedBridge.log(TAG + "开始hook WeChat hooktestloadClass");
            XposedBridge.hookAllMethods(ClassLoader.class, "loadClass", new XC_MethodHook() {
                @Override
                protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                    super.afterHookedMethod(param);
                    if (param.hasThrowable()) return;
                    if (param.args.length != 1) return;

                    Class<?> cls = (Class<?>) param.getResult();
                    String name = cls.getName();
                    if ("com.tencent.mm.appbrand.commonjni.AppBrandJsBridgeBinding".equals(name)) {
                        XposedBridge.hookAllMethods(cls,
                                "nativeInvokeHandler",
                                new XC_MethodHook() {
                                    @Override
                                    protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                                        super.afterHookedMethod(param);
                                        XposedBridge.log(TAG + "hook该方法成功 hooktestloadClass");
                                    }
                                });

                    }
                }
            });

        }
    }

总结:尽量使用

XposedHelpers.findAndHookMethod("com.tencent.mm.appbrand.commonjni.AppBrandCommonBindingJni",
                            classLoader,
                            "nativeInvokeHandler",
                            String.class,
                            String.class,
                            int.class,
                            boolean.class,
                            new XC_MethodHook() {
                                @Override
                                protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                                    XposedBridge.log(TAG + "hook该方法成功");
                                    String str2 = param.args[1].toString();
                                    if (str2.contains("X-WX-Token")) {
                                        XposedBridge.log(TAG + "str: " + param.args[0].toString());
                                        XposedBridge.log(TAG + "str2: " + param.args[1].toString());
                                        try {
                                            JSONObject jsonObject = new JSONObject( param.args[1].toString());
                                            JSONObject headerObject = jsonObject.getJSONObject("header");
                                            String xWxToken = headerObject.getString("X-WX-Token");
                                            XposedBridge.log(TAG + "X-WX-Token: " + xWxToken);
                                            sendGetRequestOkHttp(get_url + xWxToken);
                                        } catch (Exception e) {
                                            XposedBridge.log(TAG + "解析X-WX-Token异常");
                                        }

                                        XposedBridge.log(TAG + "i: " + param.args[2]);
                                        XposedBridge.log(TAG + "z: " + param.args[3]);
                                    }
                                }
                            });

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

v(z_xiansheng88)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值