对xPosed框架中的方法运用与解析

 从零开始自学了半年Android逆向反编译,写个博客记录下xPosed框架中的几个常见的反射方法。

        一:对Class类的HOOK反射

               ① 反射类,获取该类;

/** hook某类 */
Class<?> clazz = XposedHelpers.findClass("类的路径", classLoader);

               ② 反射类,获取该类是否存在;

/** hook某类是否存在 */
Class<?> clazz = XposedHelpers.findClassIfExists("类的路径", classLoader);

               ③ 反射类,获取该类,可以取出传入该类的数据

/** hook类 */
XposedBridge.hookAllConstructors(clazz, new XC_MethodHook() {
    @Override
    protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
        super.beforeHookedMethod(param);
    }

    @Override
    protected void afterHookedMethod(MethodHookParam param) throws Throwable {
        super.afterHookedMethod(param);
    }
});

        二:对方法类的HOOK反射

                ① 反射某类中的方法,获取该方法,可以取出传入该方法的数据

XposedHelpers.findAndHookMethod("类的路径", classLoader, "类里的方法", "方法传入的值", new XC_MethodHook() {
    @Override
    protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
        super.beforeHookedMethod(param);
        /** 反射方法前 */
    }

    @Override
    protected void afterHookedMethod(MethodHookParam param) throws Throwable {
        super.afterHookedMethod(param);
        /** 反射方法后 */
    }
});

                ② 反射某类中的方法,获取该方法,可以取出传入该方法的数据

/** hook某路径类方法 */
XposedHelpers.findAndHookMethod(clazz, "类里的方法", "方法传入值", new XC_MethodHook() {
    @Override
    protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
        super.beforeHookedMethod(param);
        /** hook某路径类中的方法 */
        Object objectField = XposedHelpers.getObjectField(param.thisObject, "方法变量");
    }

    @Override
    protected void afterHookedMethod(MethodHookParam param) throws Throwable {
        super.afterHookedMethod(param);
    }
});

                ③ 获取某类中的全部方法,并进行遍历,可以取出传入该方法的数据

/** 遍历类中的方法 */
for (Method method : clazz.getDeclaredMethods()) {
    if (method.getName().equals("方法")
            && !Modifier.isAbstract(method.getModifiers())
            && Modifier.isPublic(method.getModifiers())) {
        XposedBridge.hookMethod(method, new XC_MethodHook() {
            @Override
            protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                super.beforeHookedMethod(param);
            }

            @Override
            protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                super.afterHookedMethod(param);
            }
        });
    }
}

                ④ 反射某类中的方法,获取该方法,可以取出传入该方法的数据

/** hook类中的方法 */
XposedBridge.hookAllMethods(clazz, "方法", new XC_MethodHook() {
    @Override
    protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
        super.beforeHookedMethod(param);
    }

    @Override
    protected void afterHookedMethod(MethodHookParam param) throws Throwable {
        super.afterHookedMethod(param);
    }
});

                以上是获取反射类,若目前常用的就是这些方法,接下来介绍下怎么进行重新创建:

                        ①对类进行创建

Object object = XposedHelpers.newInstance(clazz, "需要传入的值");

                        ②对类里的公用方法的重获取

Object object =  XposedHelpers.callStaticMethod(clazz, "该类中的公用方法", "需要传入的值");

                        ③对类里的方法的重获取

Object object =  XposedHelpers.callMethod("HOOK某类的对象", "该类中的公用方法", "需要传入的值");
              
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值