
Xposed框架简介
Xposed:
Xposed是一款可以在不修改安卓APK的情况下影响程序运行的框架服务,Xposed原理上是Hook Android 系统的核心进程Zygote来达到修改程序运行过程和结果。
基于Xposed能够制作出许多功能强大的模块,且在功能不冲突的情况下同时运作,常用于安卓系统自定义修改和安卓逆向中。
Hook(钩子):
钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。
Xposed安装
Xposed框架的安装有两种途径:
1.到各大应用商店搜索下载Xposed框架,下载安装,不过要注意安卓版本的兼容。
图2-1 Xposed框架
2.搜索下载XposedInstaller,安装后其会自动适配安卓版本,下载对应的Xposed框架版本安装,此方式更方便。
图2-2 XposedInstaller
Xposed使用
要使用Xposed框架,需要我们自行编写相应模块,按照指定的编写模板,实现相应的Hook方法。
本次测试目标为获取某API请求响应结果,使用流程如下:
1.分析目标API
经charles抓包分析该API发现请求参数和响应结果均被加密,经过分析猜测该加密算法为AES,所以我们的第一目标是获取生成请求参数的方法和解密响应数据的方法。
第二目标是获取到加密秘钥并成功模拟请求。鉴于篇幅有限及本篇文章的主题为Xposed,故此次先介绍实现第一目标的过程。
图3-1 抓包API请求
2.找到API指定实现代码
用反编译工具(jadx)打开目标APK,在未加固未加壳的前提下可拿到其源代码,通过分析抓包数据,根据关键字(parames)找到相应代码实现:
图3-2 URI封装
由上图可见,parames的值为b=b(),b函数的实现如下:
图3-3 B函数实现
继续逐步追踪发现参数加密过程在Native层的so文件中实现,通过函数参数发现加密秘钥也在so文件中生成:
图3-4 加解密方法封装
图3-5 请求加解密实现
3.编写Xposed模块
由于Native层方法不能被Hook,故继续查找跟踪调用加解密方法的相关函数,找到加解密的封装方法,到此我们就确定了要Hook的包、类和方法,继而编写我们的Xposed模块。
Xposed模块的编写有固定的模板,我们根据模板修改目标包名、类名和方法名,通过我们自定义beforeHookedMethod和afterHookedMethod函数实现Hook逻辑,可以实现打印参数日志和修改参数及返回值等。
图3-6 Xposed模块实现
4.安装到Xposed
配置好项目环境,编译安装,安装好的模块会同步到Xposed框架的模块中,勾选开启,重启设备即可。
图3-7 安装Xposed模块
5.调试观察
打开目标APP触发目标API请求,查看Xposed日志,可看到请求原参数和解密的响应,到此实现了定下的第一目标。
图3-8 Xposed日志
总结
通过本次Xposed的简单应用,可以看到在得知目标类名及方法的前提下,可以hook任意方法,所以这个过程中的抓包和反编译及代码流程分析也很重要,如果涉及到Native层的代码,还需要借助IDA进行静动态的调试分析。
由此可见Xposed在逆向分析中可以帮助分析代码流程和关键参数信息等,是安卓逆向分析中不可或缺的辅助工具。当然也可以利用它来优化或辅助安卓软件及系统应用。
本篇文章旨在介绍Xposed的简单使用,后续会继续介绍IDA静动态调试分析so文件获取目标加密算法的秘钥,即文章开始定下的第二目标,若读者感兴趣,可敬请期待,有时间也可自己深入研究Xposed以及IDA。
12
往期精彩
· 何为“产品力”?
· 刻意练习培训法



