基于http协议的抓包工具并不能捕获到数据。于是我刚开始用 frida 的 r0capture 脚本试了下,发现加载的数据中视频是http协议,其他的是基于TCP协议的,所以想要解码抓包还需要通过其他方法。
本文主要内容:采用frida去hook掉Spdy协议实现数据抓包。
案例环境:
- 夜神模拟器 (安卓7)
- frida (安装教程)
- 闲鱼(6.8.5,模拟器推荐版本)
- android Killer (2.5的apktools)
- httpCanary 安卓抓包工具
我这里因为模拟器和闲鱼app兼容问题,使用了安卓7版的模拟器,导致对常用抓包工具证书的支持度不够友好,然后选择使用 httpCanary 安卓抓包工具。 (不需要完全按照上面的环境,可以合理调整)
一些工具的下载地址: 工具下载
反编译
把apk拖入ak中,等待反编译。
完成后全局搜一下 enableSpdy。 我是先百度得知的Spdy,之后找到的enableSpdy。
首先说一下Spdy是Google开发的基于TCP的会话层协议,它相对于http协议只需增加一个SPDY传输层,现有的所有服务端应用均不用做任何修改。
所以一般找到 DisableSpdy、enableSpdy 这种,就是关闭Spdy的关键点。
搜索结果:在dex8中的 mtopsdk.mtop.global.switchConfig 中。
Z :Bool类型
-> :引用对象类型
Lxxxxx : L是对象的意思
根据结果找一下方法名。
如果Android killer 不能把dex8的smali转换成 java 代码时,那么你就通过解压 把 dex8 单独拿出来用dex2jar 工具转成 class,然后用 jd-gui查找即可。
不同版本的方法名估计是不一样的。最好找一个跟模拟器适配的版本,然后反编译看看。
Frida脚本
Frida脚本 xy.js: (za是我找到的方法名)
Java.perform(function () {
var SwitchConfig = Java.use('mtopsdk.mtop.global.SwitchConfig');
SwitchConfig.za.overload().implementation = function () {
return false;
}
});
然后启动脚本:
frida -U -l xy.js --no-pause -f com.taobao.idlefish
最后应是开了两个cmd 和 一个模拟器。
一个启动frida-server,一个执行frida脚本。
模拟器上开启httpCanary,这样就可以捕获数据了。
我在尝试的时候遇到了很多问题,基本上是环境兼容所导致的,所以选择合理环境是很重要的。
另外不同版本的App方法名是不同的,一定需要注意。