闲鱼抓包案例

基于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方法名是不同的,一定需要注意。
在这里插入图片描述


点赞

发表回复