目录
一、Xposed概述
Xposed是GitHUB上rovo89大大设计的一个针对Android平台的动态劫持项目,通过替换/system/bin/app_process程序控制zygote进程,使得app_process在启动过程中会加载XposedBridge.jar这个jar包,从而完成对Zygote进程及其创建的Dalvik虚拟机的劫持。与采取传统的Inhook方式(详见Dynamic Dalvik Instrumentation分析这篇本章 )相比,Xposed在开机的时候完成对所有的Hook Function的劫持,在原Function执行的前后加上自定义代码。
Xposed框架的基本运行环境如下:
- Configuration:RequireMent
- Root Access:因为Xposed工作原理是在/system/bin目录下替换文件,在install的时候需要root权限,但运行时不需要root权限。
- 版本要求:需要在Android 4.0以上版本的机器中
二、Xposed原理
Android运行的核心是zygote进程,所有app的进程都是通过zygote fork出来的。通过替换system/bin/下面的app_process等文件,相当于替换了zygote进程,实现了控制手机上的所有APP。基本原理是修改了ART/Davilk虚拟机,将需要hook的函数注册为Native层函数,当执行到该函数时,虚拟机会先执行Native层函数,然后执行Java层函数,这样完成hook。
三、Xposed安装
环境:网易mumu、Android Studio3.3.1
github地址:https://github.com/rovo89/XposedInstaller
Xposedinstaller的apk:https://repo.xposed.info/module/de.robv.android.xposed.installer
在网易mumu中安装好xposedinstaller apk后,关闭应用兼容性(不关闭的话安装xposed框架会出错),进去之后点击小云彩即可安装完成。
四、初次编写Xposed代码
新建项目,选择empty activity
,创建成功后,在AndroidManifest.xml
中添加如下代码
<meta-data
android:name="xposedmodule"
android:value="true" /> <!--告诉xposed框架这是一个xposed模块-->
<meta-data
android:name="xposeddescription"
andr