Xposed模块开发

文章目录[x]
  1. 0.1:手机环境准备
  2. 0.2:应用反Xposed检测
  3. 0.3:Xposed运行原理
  4. 0.4:开发Xposed模块

手机环境准备

    以小米为例,将手机解锁root后刷入Magisk后:

1、下载Riru-Core的压缩包在Magisk Manager的模块中添加安装重启手机。

2、下载EdXposed压缩包在Magisk Manager的模块中添加安装并重启手机。

3、安装最新的EdXposedManager并打开。

4、勾选相应的模块重启手机。

应用反Xposed检测

    要让某些app不能检测到当前环境中包含Xposed框架,需要EdXposed Manager的下载中安装 “对话框取消”、“HiddenCore Module”、“RootCloak”三个模块即可。

  • 对话框取消:开启增强模式,在目标App设置中启用“防检测”,”隐藏Xposed及root”这两项。
  • HiddenCore Module:无需任何设置。
  • RootCloak:将相应App加入。

Xposed运行原理

    名为Zygote的进程是Android运行时的心脏。每个应用程序都以其副本(“ fork”)启动。手机启动时,此过程由/init.rc脚本启动。进程的启动是通过/system/bin/app_process完成的,该系统加载所需的类并调用初始化方法。

    这是Xposed发挥作用的地方。安装框架时,扩展的app_process可执行文件将复制到/system/bin。这个扩展的启动过程将一个额外的jar添加到类路径,并在某些位置从那里调用方法。例如,在创建VM之后,甚至在调用Zygotemain方法之前。在这些方法中,Xposed就Zygote的一部分,可以在其上下文中发挥作用。该jar位于/data/data/de.robv.android.xposed.installer/bin/XposedBridge.jar

    真正强大功能是Xposed的“勾子”。 通过反编译APK进行修改时,可以直接在任意位置插入/更改命令。 但是,之后将需要重新编译/签名APK,并且只能分发整个软件包。 使用可以与Xposed一起放置的钩子,就无法修改方法中的代码。 相反,可以在方法之前和之后插入自己的代码,这些方法是Java中可以清楚解决的最小单元。

    XposedBridge具有私有的本地方法hookMethodNative。 该方法也在扩展的app_process中实现。 它将方法类型更改为“native”,并将方法实现链接到其自己的本机通用方法。 这意味着,每次调用该钩子方法时,都会在没有调用者知道的情况下调用通用方法。 在此方法中,将调用XposedBridge中的handleHookedMethod方法,将参数传递给方法调用,this引用等。然后,此方法将负责调用已为此方法调用注册的回调。 它们可以更改调用的参数,更改实例/静态变量,调用其他方法,对结果执行某些操作……或跳过其中的任何内容。

开发Xposed模块

    在以上的环境准备好后就可以开始使用Android Studio开发模块了,模块只是带了些特殊配置的普通的安卓应用程序,主要依赖的库为XposedBridge

添加库依赖

    在gradle中添加如下库依赖:

compileOnly 'de.robv.android.xposed:api:82'
compileOnly 'de.robv.android.xposed:api:82:sources'

AndroidManifest.xml配置

    Xposed安装程序中的模块列表将查找带有特殊元数据标志的应用程序,需要添加如下3个meta-data数据:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.melrose1994.xposed">

<application
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
>
<!-- 表示为Xposed模块 -->
<meta-data
android:name="xposedmodule"
android:value="true" />
<!-- 在EdXposedManager模块中显示的描述信息 -->
<meta-data
android:name="xposeddescription"
android:value="模块描述" />
<meta-data
android:name="xposedminversion"
android:value="53" />
</application>

</manifest>

实现Xposed模块

    首先创建一个类来实现IXposedHookLoadPackage接口:

class XposedMoudle : IXposedHookLoadPackage {
 override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam?) {
 XposedBridge.log("Loaded app :${lpparam?.packageName}")
 }
}

配置assets/xposed_init

    现在唯一仍然缺少的是XposedBridge的入口配置,其中的类包含此类入口点。 这是通过名为xposed_init的文件完成的。 在assets文件夹中使用该名称创建一个新的文本文件。 在此文件中,每一行包含一个完全限定的类名:

com.melrose1994.xposed.XposedMoudle

开发并运行

    在完成如上配置后,就可以用XposedBridge中的类来开发模块内容, 然后将的项目作为Android应用程序运行。在安装完成之后, 打开EdXposedManager应用程序,并确保已安装框架。 然后转到“模块”选项。 就应该可以在那里找到开发的模块。 选中复选框以启用它。 然后重启手机就可以使用该模块啦。

开发试例

    微信步数修改模块,详情请见repo

点赞

发表评论

昵称和uid可以选填一个,填邮箱必填(留言回复后将会发邮件给你)
tips:输入uid可以快速获得你的昵称和头像

Title - Artist
0:00