一、目标

一、目标

网上的Xposed模块编写教程有的已经很旧了,而且Xposed已经不支持Android8以后的版本(作者不维护了),本文介绍在最新的Android系统下使用 EdXposed 来开发Xposed模块。

二、步骤

首先在手机上安装好 MagiskEdXposed (安装方法我们以后的文章里面介绍)。

Xposed模块也是一个Android程序,编译之后也是一个apk安装包。与普通程序不一样的地方是如下四点:

  1. 让EdXposed知道我们安装的这个程序是个xposed模块。
  2. 模块里要包含有xposed的API的jar包,以实现下一步的hook操作。
  3. 这个模块里面要有对目标程序进行hook操作的方法。
  4. 要让手机上的xposed框架知道,我们编写的xposed模块中,哪一个方法是实现hook操作的,也就是hook类的入口。

那么对应这四点,我们要做的是如下四步骤:

  1. 修改AndroidManifest.xml
  2. XposedBridgeApi-xx.jar与build.gradle
  3. 实现hook操作的具体代码
  4. xposed_Init

下面我们来一步一步开发一个Xposed模块

  1. 用AndroidStudio(这里我们使用的是4.0版)新建一个工程,提示我们选择“ Activity”,然后选一个Empty Activity。(这个例子工程我们不需要界面)
  2. 在…​/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" />
AndroidManifest
1:AndroidManifest.xml
  1. 在…​/app/build.gradle文件的dependencies段里面增加:

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

写完之后,build.gradle会提示文件已经修改,是否同步。点击“sync now”,同步即可。

  1. 可以把原来的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!");
        }
    }
}
  1. 最后一步,标识入口点,在…​/app/src/main目录下创建文件夹 assets,这个文件夹和AndroidManifest.xml文件平级,在assets文件夹内创建一个没有扩展名的文本文件 xposed_init,文件内容如下:
com.fenfei.zyhook.HookLoader

这个就是我们刚才创建的hook入口类

编译生成app-release.apk,安装这个apk,然后在EdXposed中启用zyhook模块,最后重启手机。

EdXposed
2:EdXposed

使用 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
100

关注微信公众号,最新技术干货实时推送

100