Xposed的基本操作

原文链接:
https://blog.csdn.net/qq_22000459/article/details/90314255

最近在用Xposed来hook一些东西,想Hook一些方法返回类型和类,但是有的时候不知道到底怎么写返回参数,和传递参数,这里自己做一个学习过程的笔记,转载只为学习。

一、获取返回值以及参数,基本数据类型。

获取一些返回字段 int、String、Byte、这些类型。
在这里插入图片描述
Hook代码

     private void hookAvatrPathPlay(ClassLoader classLoader) {
    //图片存放位置
    try {
        XposedHelpers.findAndHookMethod("com.tencent.mm.a.e", classLoader, "e",String.class,int.class,int.class,
                new XC_MethodHook() {
                    @Override
                    protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                        //返回值
                        byte[] byte1 = (byte[]) param.getResult();
                        //第一个参数
                        String str1 = (String) param.args[0];
                        //第二个参数
                        int int1= (int) param.args[1];
                        //第三个参数
                        int int2= (int) param.args[2];
                        Log.d(TAG, "hook:======emoji==str1==="+ str1);
                        Log.d(TAG, "hook:======emoji==int1==="+ int1);
                        Log.d(TAG, "hook:======emoji==int2==="+ int2);
                        Log.d(TAG, "hook:======emoji==byte1==="+ Arrays.toString(byte1));
                        super.afterHookedMethod(param);
                    }
                });
    } catch (Exception e) {
        e.printStackTrace();
    }
}

二、获取返回值以及参数,对象引用类型。
在这里插入图片描述
在这里插入图片描述
Hook代码

   private void hookWechatStorage(ClassLoader classLoader) {
    //表情存放位置
    try {
        XposedHelpers.findAndHookMethod("com.tencent.mm.plugin.card.ui.k", classLoader, "nV",int.class,
                new XC_MethodHook() {
                    @Override
                    protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                        //返回值
                        Object result = param.getResult();
                        Object hwR = result.getClass().getField("hwR").get(result);
                        Log.d(TAG, "afterHookedMethod: ======="+hwR);
                        super.afterHookedMethod(param);
                    }
                });
    } catch (Exception e) {
        e.printStackTrace();
    }
}

三、获取返回值以及参数,参数是对象类型。
在这里插入图片描述

Hook代码

 private void hookTest(ClassLoader classLoader) {
    //表情存放位置
    String className="com.tencent.mm.ax.a";
    String methodName="a";
    Class<?> aClass1 = XposedHelpers.findClass("com.tencent.mm.network.e", classLoader);
    Class<?> aClass2 = XposedHelpers.findClass("com.tencent.mm.ac.e", classLoader);
    try {
        XposedHelpers.findAndHookMethod(className, classLoader, methodName,aClass1,aClass2,
                new XC_MethodHook() {
                    @Override
                    protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                        //返回值
                        int result = (int) param.getResult();
                        //第一个参数
                        Log.d(TAG, "hook:======result==="+ result);
                        super.afterHookedMethod(param);
                    }
                });
    } catch (Exception e) {
        e.printStackTrace();
    }
}

四、打印方法调用的地方,通过打印堆栈信息。
在这里插入图片描述
Hook代码

    private void hookGetStackTraceString(ClassLoader classLoader) {
    try {
        XposedHelpers.findAndHookMethod("com.tencent.mm.a.e", classLoader, "e",String.class,int.class,int.class,
                new XC_MethodHook() {
                    @Override
                    protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                         //通过主动抛异常,来通过打印堆栈信息,锁定报错的地方,也就是调用的位置。
                        try {
                            throw new NullPointerException();
                        } catch (Exception e) {
                            Log.d(TAG, "hook:======emoji: -getStackTraceString----"+Log.getStackTraceString(e));
                        }
                        super.afterHookedMethod(param);
                    }
                });
    } catch (Exception e) {
        e.printStackTrace();
    }
}

日志信息
在这里插入图片描述
五、

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值