Xposed+XServer无需脱壳抓取加密包
Xposed框架简介
Xposed框架是一款可以在不修改APK的情况下影响程序运行(修改系统)的框架服务,通过替换/system/bin/app_process程序控制zygote进程,使得app_process在启动过程中会加载XposedBridge.jar这个jar包,从而完成对Zygote进程及其创建的Dalvik虚拟机的劫持。
基于Xposed框架可以制作出许多功能强大的模块,且在功能不冲突的情况下同时运作。此外,Xposed框架中的每一个库还可以单独下载使用,如Per APP Setting(为每个应用设置单独的dpi或修改权限)、Cydia、XPrivacy(防止隐私泄露)、BootManager(开启自启动程序管理应用)对原生Launcher替换图标等应用或功能均基于此框架。
Xposed框架安装
本次记录一下在夜神模拟器中安装Xposed框架,安装过程中踩了几个坑,导致在安装步骤上就浪费了许多时间,因此着重记录坑点。
安装环境如下:
夜神模拟器 6.6.0.5
Android 5.1.1
Xposed.installer(5.11安卓系统)
注意事项:
1.Xposed.installer要与Android版本相互兼容。
2.第一次成功安装以后提示Xposed框架未激活,此时需要进行第二次安装并重启。
针对第二点详细说明,碰到这个问题时上网搜了下,发现这个问题困扰了许多朋友,也不知道是不是夜神模拟器自身的原因。
初次安装重启后模拟器的键盘失灵(原因未知),需要再次重启模拟器,此时提示Xposed框架已安装但未激活:
此时进行第二次安装并重启后,解决未激活问题:
XServer模块简介
现如今市面上第三方APP加壳的平台较多,同时也竞争激烈。导致了对APP进行渗透测试的过程中经常遇到通信协议的分析或者各类混淆、加壳。这对渗透测试工作而言,无疑是雪上加霜。如果通过静态代码分析,那么大部分精力以及时间会耗在定位关键函数上,除此之外,逆向通信协议也通常比较麻烦,尤其本着测试目的而非协议本身。于是,XServer应运而生。
XServer是一个用于对方法进行分析的Xposed插件,它针对的是“方法”接口。由于人类习惯函数式编程,为了可维护性,往往会把各个功能分别封装进各个类与方法,这成为了程序的弱点。利用注入和反射,可以记录并拦截方法的调用,也可以在应用自身的运行环境中调用某个具体方法。这就可以对应用的分析起到辅助。另外,XServer还通过HTTP和WebSocket提供远程动态操作界面,也提供RPC接口供其它工具调用应用内的方法。
XServer模块使用
XServer安装过程较为简单,因此不再赘述,记录一下XServer模块的使用。
Xposed框架激活XServer模块:
XServer模块中选择对象:
进行端口转发:
打开浏览器输入127.0.0.1:8000,如下图所示,说明XServer启动成功:
Xposed+XServer实战演示
1.查找、定位加密函数
测试的APP对传输的数据全部进行了加密,因此需要先找出加解密函数并使用XServer对其hook,其次在调用解密函数对传输数据进行解密,这样便可以实现在不脱壳情况下对加密包进行解密,直接查看其传输的明文数据。寻找加解密函数一般使用关键字(常见如decode、encoder、decrypt、encrypt、DES、AES等)搜索。
2.尝试使用DES进行搜索:
3.可以看到哪些类中存在DES函数,此时运行APP,可以看到加解密函数被hook,并打印出堆栈信息:
4.此时在模拟器中设置好代理,APP运行时如果触发加解密函数便会将数据回弹到bp中:
总结
从bp中可以清楚得看到APP对传输数据进行加解密的整个过程。这样便可以随意在bp里对数据进行修改,然后再转发给APP,此过程便实现了在不对APP进行脱壳的情况下对加密包进行解密、修改的功能。
参考链接
https://github.com/monkeylord/XServerhttps://blog.csdn.net/nini_boom/article/details/104400619