如何使用Xposed框架Hook目标App中指定的自定义函数?
Xposed Hook指定静态方法的实现步骤
首先确保你已经完成Xposed模块的基础配置:
- 已在模块的
AndroidManifest.xml中添加Xposed框架识别的元数据声明 - 已引入对应版本的Xposed API依赖
- 已创建实现
IXposedHookLoadPackage接口的入口类,并在xposed_init文件中正确配置该入口类的全路径
核心Hook代码实现
在入口类的handleLoadPackage回调方法中添加如下逻辑即可:
import de.robv.android.xposed.IXposedHookLoadPackage; import de.robv.android.xposed.XC_MethodHook; import de.robv.android.xposed.XposedHelpers; import de.robv.android.xposed.callbacks.XC_LoadPackage; public class XposedEntry implements IXposedHookLoadPackage { @Override public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable { // 替换为你要Hook的目标App的实际包名,避免Hook到其他应用 if (!lpparam.packageName.equals("com.my.app")) { return; } XposedHelpers.findAndHookMethod( // 目标类的全类名 "com.my.app.myClass", lpparam.classLoader, // 目标方法名 "myFunction", // 目标方法的参数类型列表,该方法无参所以无需填写 new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable { super.beforeHookedMethod(param); // 可选:在原方法执行前插入逻辑,比如直接修改返回值,跳过原方法执行 param.setResult(996); // 自定义返回int值 } @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { super.afterHookedMethod(param); // 可选:在原方法执行后插入逻辑,比如获取原方法的返回值 int originalResult = (int) param.getResult(); // 可以对原返回值做修改后再返回 param.setResult(originalResult + 100); } } ); } }
常见注意事项
- 类名、方法名必须和反编译得到的代码完全一致,严格区分大小写,否则会抛出类找不到、方法找不到的异常
- 如果目标App开启了混淆,必须使用反编译后得到的混淆后的类名、方法名,不能直接使用源码中的命名
- 如果使用LSPosed等衍生框架,需要在模块作用域中勾选目标App,模块修改后需要重启目标App生效
内容的提问来源于stack exchange,提问作者Sleepy
相关产品推荐
相关产品推荐

