Fiddler抓小程序HTTPS包

前言

朋友最近一直在微信某小程序商城中抢某种商品,但该商品每日活动情况是僧多粥少,故想让我帮忙开发一个能够自动下单的脚本。总的来看,此类程序一般有两种方式来实现:一种是模拟点击——通过程序模拟人类点击手机屏幕来实现需求;另一种是模拟请求——通过直接模拟应用层网络协议的请求来实现与服务器之间的数据传输。两种方式各有所长,模拟点击实现简单但效率和准确率较低、模拟请求实现复杂但效率和准确率都较高,本着万事先折腾的原则选择了第二种方式,最终经过千难万阻之后还是失败了,但过程值得学习。

开始折腾

通常此类脚本流程还是比较固定的,无非是先用手机将所有业务流程做一遍并用软件记录下所有网络请求包,然后分析其中主要数据包并使用程序进行模拟。

配置Fiddler

有很多软件都可以实现抓包,但在此还是选择最熟悉的Fiddler,在官网下载后安装,在软件工具栏Tools->Options->HTTPS中选中捕捉HTTPS代理并启用流量加密,然后设置软件监听端口为8888:

https://cdn.jsdelivr.net/gh/wefantasy/FileCloud/img/20210325153750.png
捕捉HTTPS
设置好后重启Fiddler,然后随便打开一个网页便可在Fiddler中看见捕获的数据包:
https://cdn.jsdelivr.net/gh/wefantasy/FileCloud/img/20210325154344.png
实例网站
https://cdn.jsdelivr.net/gh/wefantasy/FileCloud/img/20210325154425.png
抓包示例

可能问题
如果设置好后没一点反应,可能需要用电脑浏览器访问127.0.0.1:8888来安装证书、然后试着将浏览器代理设置为127.0.0.1:8888

配置手机

想要fiddler能正确抓包,需要电脑同手机在同一局域网下(不严谨),最简单的方法便是使用电脑打开热点,连接热点后设置手机代理为电脑的热点的IPip:8888即可,如果存在证书问题,则可用手机浏览器打开ip:8888安装并信任证书。

抓包失败

打开fiddler代理、打开微信小程序,却发现小程序无法正确获取数据,Fiddler也只是多了一个没有数据返回的https请求:

https://cdn.jsdelivr.net/gh/wefantasy/FileCloud/img/20210325160824.png
抓包失败

分析原因

此问题令我百思不解,查阅大量资料后发现,是由于微信对HTTPS证书进行了限制导致(苹果手机无此限制)1

  1. 安卓系统 7.0 以下版本,不管微信任意版本,都会信任系统提供的证书
  2. 安卓系统 7.0 以上版本,微信 7.0 以下版本,微信会信任系统提供的证书
  3. 安卓系统 7.0 以上版本,微信 7.0 以上版本,微信只信任它自己配置的证书列表

解决方案

找到问题了就可以想到对应的解决办法:

  1. 修改 APP 配置文件
  2. 将证书安装到系统证书中(需要 root)
  3. 降低安卓版本

为了方便在此选择第三种解决方案,只需下载一个支持低版本安卓系统的模拟器即可,测试多个模拟器后,发现很多模拟器都不支持更换安卓版本,只有逍遥模拟器可以,可安装逍遥模拟器之后在逍遥多开器中可直接选择添加Android 5.1 版本的模拟器:

https://cdn.jsdelivr.net/gh/wefantasy/FileCloud/img/20210325161842.png
逍遥模拟器
之后在模拟器中重新进行以上步骤,即可成功抓取小程序包。

总结

虽然经过不懈折腾后解决了无法抓包的问题,但在所有程序快完成的时候发现最后一步的下单竟然要手机验证码实时验证,遂放弃。

参考


  1. jb. 听说安卓微信 7.0 不能抓 https?. TesterHome. [2019-01-12] ↩︎