本文将介绍 Android 5.0 ~10.0 版本 模拟器真机 Xposed/EdXposed 框架的搭建,并提供一个 hook 示例

MuMu 模拟器 Xposed 框架搭建

PS. 该方法适用 Android 5.0 ~ 8.1 的模拟器

1.打开 root 权限

​ 点击右上角三条横杠的图标,选择 设置中心

打开root权限

​ 在基本设置中勾选 开启 root 权限,保存并重启模拟器

打开root权限

2.从 网站 下载 Xposed 最终版 apk 并在模拟器中安装

下载Xposed apk

3.打开安装好的 Xposed Installer,点击 Version89,选择 Install

安装框架

4.等待一会儿,没有出现红字表示安装成功,应该会提示重启手机生效,如果没有提示就手动重启。再次打开 Xposed Installer 显示框架激活成功,即可开始 hook 之旅

安装成功


OnePlus 真机 EdXposed 框架搭建

PS. 此方法目前适用 Android 8.0 ~ 10.0,需要手机 root 权限

这里假设手机已经刷入了第三方 recovery 及通过 Magisk 获取了 root 权限,作者在 github 上这样写到:

安装方法

1.首先挂个到 M 国的梯子,打开 Magisk Manager,进入模块界面(旧版本在下载中),在线模块中会出现很多仓库中的模块

主页

2.直接搜索 riru,先安装 Riru - core,重启后安装 Riru - EdXposed,再重启一次

模块视窗

3.到 github 上下载配套的 EdXposed Manager 并安装、重启

安装Edxposed Manager

4.打开 EdXposed Manager,出现如下界面表示框架安装成功,剩下的模块开发流程与 Xposed 相同

安装成功


EdXposed Hook 示例

这里以 OnePlus 真机(Android 9)为例,Xposed 框架与其操作完全相同,开发 IDE 使用 Android Studio 4.0.1

示例 APP

下面是被 hook 程序 MainActivity 代码,该 app 只是简单的将 Hello World! 显示在中央:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package com.example.helloword;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView tv = (TextView) findViewById(R.id.tv);
tv.setText(GetWelcomeString());
}

private String GetWelcomeString() {
return "Hello World!";
}
}

界面:

被hook程序

本例的目标是 hook GetWelcomeString() 函数,使软件显示 Hello World! - Hooked


创建并配置 Hook 项目

创建新的 EdXposed 项目,并添加新 Java 类,命名为 HookMain

EdXposed项目

app 层级下创建一个目录 mylib,下载 XposedBridgeApi-54.jar 并拷贝到 mylib 中(不要直接放在 libs 目录中)

mylib

右键该 jar 包,选择 Add As Library…,弹出窗口中选择 OK

mylib

打开 app\src\build.gradle,找到 dependencies,删除 implementation files(‘mylib\XposedBridgeApi-54.jar’),添加 compileOnly ‘de.robv.android.xposed:api:82’。有的教程里还在用 provided 关键字,该关键字已经被废弃,取而代之的是 compileOnly

build.gradle

编辑 AndroidManifest.xml,在 application 标签下为模块添加 meta-data 描述

AndroidManifest

1
2
3
<meta-data android:name="xposedmodule" android:value="true" />
<meta-data android:name="xposeddescription" android:value="EdXposed 插件开发测试" />
<meta-data android:name="xposedminversion" android:value="54" />

最后需要告诉框架此模块的入口类在哪里

创建 assets 文件夹

创建assets文件夹

在 assets 文件夹下创建 xposed_init 文件

xposed_init

写入 HookMain 的路径

xposed_init


编写 Hook 代码

如图:

hook代码


安装运行

将该 hook 用的 apk 安装到手机上,在 EdXposed Manager 中打开模块视窗,激活该模块

激活模块

重启后打开 HelloWorld 的 app,可以看到,已经被 Hook 了

hook成功