XPosed初体验
使用XPosed框架进行一次Hook (模拟器Demo)
前提准备 (下面的下载地址均为官方地址, 可直接下载):
-
带有Root的模拟器
(我这里选择的是夜神模拟器) 下载地址 -
XPosed Installer
(手机上的XPosed框架) 下载地址 -
Android Studio
(写一个并App实现简单功能, 再写一个插件进行Hook) 下载地址 -
Android platform-tools
(可有可无, 模拟器一般都有adb命令. 如果是真机, 需要下载.) 下载地址
开始
1、首先打开夜神模拟器, 并将XPosed Installer安装到模拟器上.
XPosed安装
2、打开XPosed Installer软件, 并将XPosed框架安装到手机上,随后重启机器. (我这里已经安装重启完成了, 如果不清楚如何安装可以参考这篇博客).
XPosed安装
3、使用adb命令将夜神模拟器连接到电脑 (为了Android Studio能够识别并安装App).
配置platform-tools的环境变量
将下载好的platform-tools 解压到指定位置, 并在电脑中加入该路径为环境变量.
adb命令
在命令行模式下输入adb devices
能看到下面的图片信息说明配置没有问题.
将模拟器连接到命令行
在命令行模式下输入
模拟器连接命令行adb connect 127.0.0.1:62001
看到下面的图片信息说明模拟器已经连接到命令行了.
如果连接过程中出现了其他问题, 请参考这篇博客
4、安装Android Studio并创建一个新项目 (模拟一个正常的App)
创建一个空的项目这里需要注意, 创建项目时选择的SDK版本需要和模拟器的版本一致.
创建项目
模拟器的版本可以在设置里看到.
模拟器版本
建议将这里关掉, 否则会有意想不到的情况. (旧版本AS的 Instant run选项)
image.png
5、终于要开始写码了!!!
先看一眼刚才新建的项目
新项目4个主要文件, 依次展开简单讲一下.
AndroidManifest.xml
AndroidManifest
官方解释是应用清单(manifest意思是货单),每个应用的根目录中都必须包含一个,并且文件名必须一模一样。这个文件中包含了APP的配置信息,系统需要根据里面的内容运行APP的代码,显示界面。 更详细的讲解请移步这里
MainActivity
这个就不多说了, App的一个Activity, 从代码中可以看到,在
onCreate
方法中连接到了activity_main这个布局.
activity_main.xml
安卓的页面布局文件.
build.gradle
Gradle
是一个基于Apache Ant和Apache Maven概念的项目自动化构建工具。它使用一种基于Groovy的特定领域语言来声明项目设置,而不是传统的XML。Gradle
就是工程的管理,帮我们做了依赖、打包、部署、发布、各种渠道的差异管理等工作。现在我们给这个App创建一个
layout文件button
和一个TextView
在activity_main.xml
文件中, 拖拽一个button到界面上, 并将四边的蓝色圆点拉倒屏幕四周。 否则编译会出现错误(我也还不清楚为什么会出错, 弄清楚之后会在这里补下原因)之后记录下刚才创建的button的id和下方Textview的id。
记录id
选中控件,在右侧面板上可以看到这个控件的id。如果找不到这个面板, 可以再右侧找到Attributes按钮, 单击打开即可。 TextView的默认文案也可以在下方进行编辑(text属性)。
回到
按钮绑定事件MainActivity.java
文件, 为button进行事件绑定. 话不多说, 直接上图.
6、运行项目,测试代码功能正确.
图片
点击按钮后
点击按钮后
7、正文开始, 新建一个App配合XPosed Installer对这个正常的App进行Hook操作。
创建App过程不变, 这里就不重复了.
首先将这里的目录切换到Project
image.png
具体看图片, 涉及到改动的地方只有这4个
Hook App
assets文件夹, 我是复制了main目录下的res文件夹之后改名为assets的, 之后在assets下新建一个文件
xposed_init
(没有后缀!)xposed_init
文件中只需要写一行,就是你Hook的入口, 我这里使用的是com.example.hook.Hook
(也就是第二个红框的内容)Hook.java, hook类的入口, Hook逻辑都从这里进入.
AndroidManifest.xml 这里需要加入XPosed的标签,安装App后方便XPosed Installer识别.
标签一共分为3个, 放在<application>
标签下<meta-data android:name="xposedmodule" android:value="true" /> <meta-data android:name="xposeddescription" android:value="我是一个Xposed例程" /> <meta-data android:name="xposedminversion" android:value="53" />
至于最后一个标签的版本为什么是53, 可以参考官方文档
build.gradle 这里需要引入XPosed的包, 在dependencies
中加入这句话就可以了provided 'de.robv.android.xposed:api:82'
8、一切就绪, 开始Hook
打开
Hook.javaHook.java
并申明IXposedHookLoadPackage
接口, 实现接口方法. (这个接口只有一个方法)在这个方法中使用XposedHelper进行Hook (上文写的App 包名为adom, 现在Hook的是loginSuccess方法)
Hook代码
9、安装XPosed插件
安装插件
当插件安装成功后,可以看到手机上立马弹出了提示发现一个XPosed模块.
打开XPosed Installer软件, 点击左上角的菜单, 随后打开模块
安装模块
重启手机, 使模块生效~