XPosed框架中的方法運用

從零開始自學了半年Android逆向反編譯,XPosed框架中的幾個常見的反射方法

一、對Class類的HOOK反射

① 反射類,獲取該類;

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

② 反射類,獲取該類是否存在;

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

③ 反射類,獲取該類,可以取出傳入該類的數(shù)據(jù)

/** 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反射

① 反射某類中的方法,獲取該方法,可以取出傳入該方法的數(shù)據(jù)

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);
        /** 反射方法后 */
    }
});

② 反射某類中的方法,獲取該方法,可以取出傳入該方法的數(shù)據(jù)

/** 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);
    }
});

③ 獲取某類中的全部方法,并進行遍歷,可以取出傳入該方法的數(shù)據(jù)

/** 遍歷類中的方法 */
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);
           }
       });
   }
}

④ 反射某類中的方法,獲取該方法,可以取出傳入該方法的數(shù)據(jù)

/** 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);
  }
});

以上是獲取反射類,若目前常用的就是這些方法,接下來介紹下怎么進行重新創(chuàng)建:

①對類進行創(chuàng)建

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

②對類里的公用方法的重獲取

Object object =  XposedHelpers.callStaticMethod(clazz, "該類中的公用方法", "需要傳入的值");      

③對類里的方法的重獲取

Object object =  XposedHelpers.callMethod("HOOK某類的對象", "該類中的公用方法", "需要傳入的值");
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容