文章

Xposed

Xposed

Xposed 基础

什么是 Xposed

Xposed(也被称作 Xposed 框架、XP 框架、Xposed framework),是一个运行于 Android 操作系统的 钩子框架。其通过替换 Android 系统的关键文件,可以拦截几乎所有 Java函数 的调用,并允许通过 Xposed 模块中的自定义代码更改调用这些函数时的行为。因此,Xposed 常被用来修改 Android 系统和应用程序的功能。

Xposed InstallerXposed 框架的官方安装器,可以在拥有 root 权限的设备上安装 Xposed 框架。Xposed Installer 也提供模块的下载、管理、日志显示等功能。

Xposed 框架发展

  • 原版的 Xposed
  • EdXpsoed
  • 太极·阳(太极·阳是 Magisk 模块的非虚拟环境了,太极·阴是虚拟环境,和 VirtualXposed 类似。)阴不算,阳算。
  • VirtualXposed
  • 再到 LSPosed,2025 年 1 月 LSPosed 也宣布弃坑。
  • 又出现基于 LSposedLSPosed_mod

自定义 Xposed 模块

见: [[自定义XPosed模块]]

开源的 Xposed 模块

见 [[开源的XPosed模块]]

Xposed 分支

EdXposed

LSPPosed

见:[[LSPosed]]

Xposed 工作原理

Xposed 框架主要通过替换 /system/bin/app_process 程序控制 zygote 进程,使得 app_process 在启动过程中会加载 XposedBridge.jar 这个 jar 包,从而完成对 Zygote进程其创建的Dalvik虚拟机 的劫持。与采取传统的 Inhook 方式相比,Xposed 在开机的时候完成对所有的 Hook Function 的劫持,在原 Function 执行的前后加上自定义代码。

为什么需要这么做呢? Android 基于 Linux,第一个启动的进程自然是 init 进程,该进程会启动所有 Android 进程的父进程——Zygote(孵化) 进程,该进程的启动配置在 /init.rc 脚本中,而 Zygote 进程对应的执行文件是 /system/bin/app_process, 该文件完成类库的加载以及一些函数的调用工作。在 Zygote 进程创建后, 再 fork 出 SystemServer 进程和其他进程。Xposed Framework,就是用自己实现的 app_process 替换掉了系统原本 提供的 app_process,加载一个额外的 jar 包,然后入口从原来的: com.android.internal.osZygoteInit.main() 被替换成了: de.robv.android.xposed.XposedBridge.main()
然后创建的 Zygote 进程就变成 Hook 的 Zygote 进程了,而后面 Fork 出来的进程也是被 Hook 过的。

这个 Jar 包在: /data/data/de.rbov.android.xposed.installer/bin/XposedBridge.jar 目录下。

通过原理我们可以看出,要使用 Xposed 框架,那么手机必须要拥有最高权限(就是 root 权限),当然现在还出现了 VirtualXposed,这个框架的话就相当于给你的手机开了一个平行空间,这个空间和你的手机系统一样,就相当于一个副本,所以当你在这个空间使用 xposed 的话,就不需要 root,但是在这个空间你需要重新安装你想修改的程序,因为它刚创建出来的时候是什么都没有的,也因此你在这个空间修改并不会影响到你的手机本来的应用,就相当于双开应用。
值得注意的是,既然给出了最高权限,那么别人就可以做很多坏事了,比如获取你的账号密码,还有一些私密的文件,因此对于别人写的 Xposed 模块可以看看他是不是开源的再决定用不用,如果不是开源的,建议不要使用。当然如果不想承担这么大的风险又不嫌麻烦的话,可以使用上面介绍的 virtualXposed 框架。

Xposed 应用

辅助开发

  • Intent 查看器 抓取 Activity 跳转传递的 Intent 信息。

Ref

XDA

官方教程

本文由作者按照 CC BY 4.0 进行授权