Fiddler 抓包小程序及其原理

0 阅读4分钟

背景和目标

目前公司业务后续会更多的使用小程序,很多内嵌 h5 页面也慢慢开发转换为原生小程序页面,这对我们后端进行问题排查是比较难以定位的,本次的目标就是使用 Fiddler 进行小程序抓包排查,学会 fiddler 常用技巧。(企微也可以,实际上是手机上的所有请求都能抓包,以 IOS 为例,安卓手机未尝试);

原理

核心工作机制:中间人代理

Fiddler 本质是一个 HTTP/HTTPS 代理服务器,工作在应用层,Fiddler 如同一个“数据中转站”,拦截并记录所有经过的流量,数据流向:
手机 -> Fiddler -> 目标服务器服务器 -> Fiddler -> 手机

HTTPS 抓包原理:证书欺骗和双向解密

在没有 fiddler 中间服务的情况下,手机与目标服务器的 HTTPS 连接建立过程:

(1) 客户端问候(Client Hello);
(2) 服务端回应问候(ServerHello + 证书等)
(3) 客户端验证证书(用内置的 CA 根证书公钥验证服务端证书),生成预主密钥(Pre-Master Secret,48 字节随机值,使用服务器公钥加密)
(4) 服务器用私钥解密 Pre-Master Secret,验证没问题确认握手;

而 Fiddler 是在中间层,自己生成了一个 ssl 证书,手机在安装完 Fiddler 的证书后,实际上手机与 Fiddler 建立了 ssl 连接,然后 Fiddler 和目标服务器也建立了一个 ssl 连接;此时 Fiddler 充当服务器,对于目标服务器来说又是一个普通的客户端。

这样就是为什么设备(电脑/手机)需要信任 Fiddler 证书? :如果手机不信任 FiddlerRoot,会在 “手机 <--> Fiddler” 的 SSL 握手阶段,验证伪造证书失败,直接终止连接,Fiddler 无法和手机建立连接,也就无法进行后续解密。

安装

下载地址:www.telerik.com/download/fi…

需要先注册用户;

注意该地址有两个入口:

下载左边的 Fiddler 普通版,选择个人使用,输入信息下载即可。右边是功能更强大的一个版本,但是只有 30 天试用期。

下载后双击安装一直下一步即可安装完成。

界面简单介绍

image.png 抓取开关

配置

  1. 点击【工具】-【选项】,勾选上 https 相关功能,勾选之后会自动生成一个 fiddler 的 ssl 证书,同时弹窗对证书进行确认:

  2. 确保本地机器信任该证书,手动再点击一边信任证书:

  3. 选中 Connections,设置本地 fiddler 代理服务的端口号和允许远程连接,即允许别的设备把 HTTP/HTTPS 请求发送到本地机器上。(设置此设置后需要重启)

  4. 重启 fiddler 后,手机连接到和电脑同一个 wifi 下面,手机访问电脑 ip + 端口,进入 fiddler 代理服务器的页面,能访问说明正确启动了 fiddler 代理服务器,点击 FiddlerRoot certficate 下载 ssl 证书,然后在手机设置里面安装和信任该证书:

image.png

  1. 同时设置手机 wifi 的代理,把配置代理设置为手动,填写 fiddler 服务器的地址:
    image.png
  2. 手机上访问小程序,可以观察到对应的请求:
    image.png

image.png

使用技巧

  1. 过滤规则
    Use Filtters 启用规则,选中 Show Only the following Hosts,可以输入指定域名,

    Run Filterset now:运行设置的过滤条件
    Load Filterset 加载本地的过滤条件
    Save Filterset 保存设置的过滤条件

    也可以使用通配符

    根据其他条件进行过滤:

  2. 解码

  3. 图标说明

  4. 断点,调试一个复杂的API接口,想要手动修改请求或响应的数据的情况下;
    拦截的时间点:

    全局断点:

    使用 bpu + url 命令:


    怎么清除规则?命令行只输入 bpu:

  5. 模拟 http 请求:

  6. 使用 AutoResponder 模拟 http 返回:


Fiddler 使用后无法上网的原因

我们使用完Fiddler后,要养成用完就关闭软件的好习惯,要知道Fiddler的原理其实是在本地建立起一个代理去监听我们的请求。

  1. 浏览器:虽然 Fiddler 退出的时候会自动注销这个代理服务器,但是如果Fiddler非正常退出的话,就会对网页的正常访问造成影响。

    解决方案:重启 Fiddler 后正常退出;
  2. 手机:Fiddler 退出后,手机连接的 wifi 如果没有关闭代理配置,那手机发出的请求会被发到代理服务器,而代理服务器不存在,导致手机无网络。