美文网首页
三分钟上手 Xposed Hook

三分钟上手 Xposed Hook

作者: sunrain_ | 来源:发表于2019-05-02 15:22 被阅读0次

前言

本文适用于 Xposed 插件开发者,不适用于普通用户。
您需要准备好 Xposed 环境。

编写插件

新建一个工程,在 AndroidManifest.xml 中添加以下 meta-data:

<!-- 是否是 xposed 模块 -->
<meta-data
    android:name="xposedmodule"
    android:value="true" />

<!-- 模块描述 -->
<meta-data
    android:name="xposeddescription"
    android:value="测试 Xposed 模块" />

<!-- 最低 xposed 版本号 -->
<meta-data
    android:name="xposedminversion"
    android:value="53" />

修改 app/gradle 添加依赖:

dependencies {
    ···
    compileOnly 'de.robv.android.xposed:api:82'
    compileOnly 'de.robv.android.xposed:api:82:sources'
}

新建类实现接口,例如:

package com.hook.runtime;

import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.callbacks.XC_LoadPackage;

public class Hook implements IXposedHookLoadPackage {
    @Override
    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) {
    }
}

在 assets 目录下创建 xposed_init 文件,填写刚才类的全类名,标明模块入口:

至此,最基本的框架就搭建完毕了。
下面以 Hook Runtime#exec() 方法为例,完善刚才的接口实现。

Hook Runtime.getRuntime().exec("xxxx")

先编写一个包名为 com.example.hooktarget 的应用:

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        try {
            Runtime.getRuntime().exec("exec test");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

接来下完成对 com.example.hooktarget 应用执行 Runtime.getRuntime().exec("exec test") 方法的 Hook:

public class Hook implements IXposedHookLoadPackage {

    private static final String PACKAGE_NAME = "com.example.hooktarget";

    @Override
    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) {
        if (!loadPackageParam.packageName.equals(PACKAGE_NAME)) {
            return;
        }

        XposedBridge.log("hook begin");

        XposedHelpers.findAndHookMethod(Runtime.class, "exec", String.class, new XC_MethodHook() {
            @Override
            protected void beforeHookedMethod(MethodHookParam param) {
                XposedBridge.log((String) param.args[0]);
            }
        });
    }
}

编译后,安装到手机,在 Xposed Installer 中启用并重启,当我们运行 com.example.hooktarget 应用时,就可以看到日志输出了:

05-02 15:22:28.807 18438-18438/? I/Xposed: hook begin
05-02 15:22:28.954 18438-18438/? I/Xposed: exec test

相关文章

网友评论

      本文标题:三分钟上手 Xposed Hook

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