Xposed原理简介及其精简化
Xposed是⼀个很强⼤的Android平台上的HOOK⼯具,⽽且作者为了⽅便开发者使⽤开发了⼀个APP(Xposed Installer,下⽂称为Installer)
来使⽤开发者⾃⼰开发的模块。开发者安装⾃⼰的模块后需要在Installer中勾选⾃⼰的模块然后重启⼿机⾃⼰的模块才会起作⽤。但是这样有点不
利于开发者测试,每次都要点开Installer操作⼏下尤其是还要重启就显得有点⿇烦了。
读过Xposed的源码后会发现仅通过更改XposedBridge.jar的源码就可以更简便⼀些:
- 不需重启⼿机
- 不需操作Installer这个App,且不⽤安装hook模块,只需push到⼿机即可⾸先需要下载源码,rovo89链接⾥⾯有Xposed所有源码,我们只需要下载XposedBridge就好。
原版的Xposed并不适⽤于三星⼿机,wanam改过的Xposed可以⽤,所以如果是三星⼿机的话就下载wanam的。
1. Xposed原理简介
现在安装Xposed⽐较⽅便,因为Xposed作者开发了⼀个Xposed Installer App,下载后按照提⽰傻⽠式安装(前提是root⼿机)。其实它的
安装过程是这个样⼦的:⾸先探测⼿机型号,然后按照⼿机版本下载不同的刷机包,最后把Xposed刷机包刷⼊⼿机重启就好。刷机包下载 ⾥⾯
有所有版本的刷机包。
刷机包解压打开⾥⾯的问件构成是这个样⼦的:
META-INF/ ⾥⾯有⽂件配置脚本 flash-script.sh 配置各个⽂件安装位置。
system/bin/ 替换zygote进程等⽂件
system/framework/XposedBridge.jar jar包位置
system/lib system/lib64 ⼀些so⽂件所在位置
xposed.prop xposed版本说明⽂件
所以安装Xposed的过程就上把上⾯这些⽂件放到⼿机⾥相同⽂件路径下。
通过查看⽂件安装脚本发现:
system/bin/下⾯的⽂件替换了app_process等⽂件,app_process就是zygote进程⽂件。所以Xposed通过替换zygote进程实现了控制⼿机
上所有app进程。因为所有app进程都是由Zygote fork出来的。
Xposed的基本原理是修改了ART/Davilk虚拟机,将需要hook的函数注册为Native层函数。当执⾏到这⼀函数是虚拟机会优先执⾏Native层函
数,然后再去执⾏Java层函数,这样完成函数的hook。如下图:
通过读Xposed源码发现其启动过程:
- ⼿机启动时init进程会启动zygote这个进程。由于zygote进程⽂