一、目标
网上的Xposed模块编写教程有的已经很旧了,而且Xposed已经不支持Android8以后的版本(作者不维护了),本文介绍在最新的Android系统下使用 EdXposed 来开发Xposed模块。
二、步骤
首先在手机上安装好 Magisk 和 EdXposed (安装方法我们以后的文章里面介绍)。
Xposed模块也是一个Android程序,编译之后也是一个apk安装包。与普通程序不一样的地方是如下四点:
- 让EdXposed知道我们安装的这个程序是个xposed模块。
- 模块里要包含有xposed的API的jar包,以实现下一步的hook操作。
- 这个模块里面要有对目标程序进行hook操作的方法。
- 要让手机上的xposed框架知道,我们编写的xposed模块中,哪一个方法是实现hook操作的,也就是hook类的入口。
那么对应这四点,我们要做的是如下四步骤:
- 修改AndroidManifest.xml
- XposedBridgeApi-xx.jar与build.gradle
- 实现hook操作的具体代码
- xposed_Init
下面我们来一步一步开发一个Xposed模块
- 用AndroidStudio(这里我们使用的是4.0版)新建一个工程,提示我们选择“ Activity”,然后选一个Empty Activity。(这个例子工程我们不需要界面)
- 在…/app/src/main/目录下面找到 AndroidManifest.xml 文件,插入以下3段代码
<meta-data
android:name="xposedmodule"
android:value="true" />
<meta-data
android:name="xposeddescription"
android:value="zy hook" />
<meta-data
android:name="xposedminversion"
android:value="53" />
在…/app/build.gradle文件的dependencies段里面增加:
dependencies { ... compileOnly 'de.robv.android.xposed:api:82' compileOnly 'de.robv.android.xposed:api:82:sources' }
写完之后,build.gradle会提示文件已经修改,是否同步。点击“sync now”,同步即可。
- 可以把原来的MainActivity.java文件删除掉,在同级目录下面创建一个新文件 HookLoader.java
package com.fenfei.zyhook;
import android.util.Log;
import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage;
public class HookLoader implements IXposedHookLoadPackage {
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {
Log.i("fenfei", "Im comming Frist"); // 模块载入时就输出
// XposedBridge.log("fenfei zy has Hooked Frist!");
if (loadPackageParam.packageName.equals("cn.xiaochuankeji.tieba")) {
Log.i("fenfei", "Im comming zy"); // 最右app启动时,被hook到了,输出
// XposedBridge.log("fenfei zy has Hooked!");
}
}
}
- 最后一步,标识入口点,在…/app/src/main目录下创建文件夹 assets,这个文件夹和AndroidManifest.xml文件平级,在assets文件夹内创建一个没有扩展名的文本文件 xposed_init,文件内容如下:
com.fenfei.zyhook.HookLoader
这个就是我们刚才创建的hook入口类
编译生成app-release.apk,安装这个apk,然后在EdXposed中启用zyhook模块,最后重启手机。
使用 adb logcat | grep fenfei 命令就可以看到打印的信息
10-23 16:46:41.809 7343 7343 I fenfei : Im comming zy
10-23 16:46:44.486 7584 7584 I fenfei : Im comming Frist
10-23 16:46:44.487 7584 7584 I fenfei : Im comming zy
10-23 16:46:44.584 7343 7343 I fenfei : Im comming Frist
关注微信公众号,最新技术干货实时推送