美文网首页
XPosed框架中的方法运用

XPosed框架中的方法运用

作者: 笨蛋小灰熊 | 来源:发表于2021-05-11 17:57 被阅读0次

    从零开始自学了半年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某类的对象", "该类中的公用方法", "需要传入的值");
    

    相关文章

      网友评论

          本文标题:XPosed框架中的方法运用

          本文链接:https://www.haomeiwen.com/subject/mfdndltx.html