Android 如何抓取淘系的网络请求
前期准备
已 root真机或者Android模拟器,我这边使用MuMu模拟器,具体设置如下:
MuMu 模拟器下载地址:
下载安装完成后,设置一下模拟器的 root 权限模式:
设置模拟器的网络代理:
长按无线连接弹出设置选项框,点击修改网络。
设置网络抓包代理:
安装Charles SSL信任证书:
Frida 动态调试工具
Mac 端安装
1 | pip install frida |
frida-server 模拟器或者真机服务端程序下载:(需要根据具体的架构版本下载对应的包,本教程是X86 intel 版本的Mac 所以选择 frida-server-16.0.19-android-x86_64.xz)
https://github.com/frida/frida/releases
下载完成之后需要使用 Android ADB 工具安装到对应的模拟器或者真机子上。
ADB工具下载地址:(已安装 Android Studio 自带)
1 | # Mac版本: |
命令执行:
1 | # adb连接mumu模拟器 |
在电脑端查看模拟器的启动相关进程, 能看到淘宝App的进程ID,说明连接成功。
1 | frida-ps -U |
逆向分析代码:
使用Charles、Fiddle等抓包工具对淘系App进行抓包时,会发现总是抓不到包,出现请求不走Charles代理的情况。
这是因为淘系App底层网络通信的协议并不是普通的http协议,而是自己实现的一套私有协议Spdy。
我们需要逆向分析一下App,看看有什么方法是关于这个 Spdy的。
首先需要准备一个需要分析的 APK 包,然后使用 Jadx 工具分析。
下载地址:
解压后打开 jadx-gui :
打开需要分析的APK文件:
通过分析以及查找相关的字段,获取到比较关键的方法:isGlobalSpdySwitchOpen 这个方法返回 True 的话就回执行淘宝请求的私有协议,我们需要Hook这个方法,让它直接返回 False 不需要使用
Spdy 方式请求数据。
Frida 脚本编写
这边使用 Python 编写,也可以使用 JS 编写。
1 | import sys |
Frida 正式抓包
打开 Charles 以及 SSL代理设置,模拟器打开淘宝APP。
运行刚才写好的脚本
1 | python3 app.py |
如果 hook 相关函数成功会有日志输出,显示原来的方法调用返回信息,这样就可以抓到了淘宝的请求包了。
功能页面截图:
网络请求数据: