Xposed中Hook某个方法并且主动调用的学习总结

start:2020年8月29日

一、前言

应用场景:我最近正在分析一个App的网络协议,通过分析我已经找到了加密方法的位置,我现在需要用这个加密方法为我主动加密一些数据,然后再将这些数据返回给服务器,这样我就可以提交自定义的内容给服务器了。

二、调用流程

 

  • ClassLoader -> 类加载器

  • Class - > 类

  • Instance -> 实例化对象

  • Method -> 方法

 

  1. 第一步:拿到要Hook的方法所在类的ClassLoader对象
  2. 第二步:通过这个ClassLoader找到对应的Class对象
  3. 第三步:通过这个Class对象实例化一个对象
  4. 第四步:通过这个实例化对象调用对应的方法

 

三、调用方式

 

方式一:callMethod()

返回值:调用方法的返回值

使用场景:明确知道方法参数的组成,直接调用。

 

方式二:findMethodBestMatch()

返回值:Method对象

使用场景:方法名重复,只知道方法参数的大概类型,匹配最佳方法。

 

四、方法在不同位置被调用

 

  • 调用本类方法:

 

  • 调用外部类方法1:

 

  • 调用外部类方法2:

 

  • 调用外部程序类:

 

 

五、总结

延伸:现在App大多加壳了,要想find到自己想要的Class,首先就需要拿到真正的ClassLoader对象,然后你再去findAndHook就能找到了,参考代码形式:调用外部程序类

 

 

 

end:by take

### 回答1: 如果你想通过 Xposed 框架对 ActivityThread.class 的 currentActivityThread 方法对应的 ArtMethod 对象的 hotness_count_ 字段进行 hook,您需要在 Xposed 框架编写一个模块,并通过 XposedBridge API 进行 hook。您需要在 Xposed 模块通过 XposedHelpers.findAndHookMethod() 方法获取 currentActivityThread 方法,然后使用 XposedBridge.hookMethod() 方法对其进行 hook。在 hook 方法,您可以通过反射获取 hotness_count_ 字段的值,并对其进行修改。 注意:在修改系统层代码(如 Android framework)的 hotness_count_ 字段时,请谨慎操作,以免造成系统不稳定。 ### 回答2: 想要通过Xposed框架hook安卓ActivityThread.class的currentActivityThread方法对应的ArtMethod对象的hotness_count_字段值,需要先了解一些相关知识。 Xposed框架是一款用于修改安卓系统的框架,它通过hook技术来实现对安卓应用的改造和扩展。在使用Xposed框架时,首先需要安装Xposed框架并激活,然后编写相应的模块来实现hook。 要hook ActivityThread.class的currentActivityThread方法,可以通过Xposed的findAndHookMethod方法来实现。首先,我们在模块的初始化方法使用该方法对currentActivityThread方法进行hook。在hook的回调函数,我们可以获取到当前执行的ArtMethod对象。 要获取ArtMethod对象的hotness_count_字段值,可以使用Java的反射机制来实现。首先,通过反射获取到ArtMethod类的声明,然后再通过反射获取到hotness_count_字段,并获取该字段的值。 具体代码如下: ```java import de.robv.android.xposed.XC_MethodHook; import de.robv.android.xposed.XposedHelpers; public class MyXposedModule { public void initZygote() { XposedHelpers.findAndHookMethod("android.app.ActivityThread", null, "currentActivityThread", new XC_MethodHook() { @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { // 获取当前执行的ArtMethod对象 Object currentActivityThread = param.getResult(); // 获取ArtMethod类 Class<?> artMethodClass = XposedHelpers.findClass("java.lang.reflect.ArtMethod", currentActivityThread.getClass().getClassLoader()); // 获取hotness_count_字段 Object hotnessCount = XposedHelpers.getObjectField(currentActivityThread, "hotness_count_"); // 打印hotness_count_字段值 if (hotnessCount != null) { int hotnessCountValue = (int) hotnessCount; Log.d("MyXposedModule", "hotness_count_: " + hotnessCountValue); } } }); } } ``` 以上代码实现了对currentActivityThread方法hook,获取到ArtMethod对象后再获取其的hotness_count_字段并进行打印。 需要注意的是,Xposed框架的使用可能需要root权限,并且不同版本的安卓系统以及应用可能会有一些差异,可能需要根据实际情况进行相应的修改。 ### 回答3: 要想通过Xposed框架hook安卓ActivityThread.class的currentActivityThread()方法对应的ArtMethod对象的hotness_count_字段值,需要按照以下步骤进行: 首先,使用Xposed框架创建一个模块,在模块的init方法进行hook操作。可以使用findAndHookMethod函数来hook currentActivityThread()方法。代码如下所示: ```java public class MyXposedModule implements IXposedHookLoadPackage { @Override public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { if (!lpparam.packageName.equals("com.android.systemui")) { return; } // 当加载的包是 com.android.systemui 时进行hook操作 XposedHelpers.findAndHookMethod("android.app.ActivityThread", lpparam.classLoader, "currentActivityThread", new XC_MethodHook() { @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { // 获取 currentActivityThread 方法的返回值(即 ActivityThread 对象) Object activityThreadObj = param.getResult(); // 获取 ActivityThread 类的 mHotcness_count 字段 Field hotnessField = activityThreadObj.getClass().getDeclaredField("mHotness_count"); hotnessField.setAccessible(true); // 修改 mHotness_count 的值为你想要的值 hotnessField.setInt(activityThreadObj, 100); } }); } } ``` 上述代码,我们通过hook currentActivityThread()方法获取了ActivityThread对象,并通过反射获取到该对象的mHotness_count字段,并将其值修改为100。 接下来,使用Android Studio或其他工具进行编译和打包,得到一个Xposed模块的apk文件。 最后,将生成的apk文件安装到Android设备上,并使用Xposed框架将该模块激活即可。当目标应用启动时,Xposed框架会自动调用我们编写的hook代码,从而成功修改ArtMethod对象的hotness_count_字段值。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值