Xposed
Xposed
基础
什么是 Xposed
?
Xposed(也被称作 Xposed 框架、XP 框架、Xposed framework),是一个运行于 Android 操作系统的 钩子框架。其通过替换 Android 系统的关键文件,可以拦截几乎所有 Java函数 的调用,并允许通过 Xposed 模块中的自定义代码更改调用这些函数时的行为。因此,Xposed 常被用来修改 Android 系统和应用程序的功能。
Xposed Installer
是 Xposed
框架的官方安装器,可以在拥有 root 权限的设备上安装 Xposed
框架。Xposed Installer
也提供模块的下载、管理、日志显示等功能。
Xposed
框架发展
- 原版的
Xposed
- 到
EdXpsoed
- 太极·阳(太极·阳是 Magisk 模块的非虚拟环境了,太极·阴是虚拟环境,和 VirtualXposed 类似。)阴不算,阳算。
VirtualXposed
- 再到 LSPosed,2025 年 1 月 LSPosed 也宣布弃坑。
- 又出现基于
LSposed
的 LSPosed_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 信息。