从 Mac 调试 iPhone

这篇指南从一部装好 Chute 的手机开始,到 Mac 上打开一个窗口、看到这部手机解密后的请求(含请求与响应正文)、可以筛选和导出为止。它把各自有参考页的东西——CA、主机列表、录制、控制通道、Dashboard——按你实际操作的顺序串起来,并在每一步说明继续之前你应该看到什么。

你需要:

  • 手机上的Chute iOS,且已有许可证。在 iPhone 上,HTTPS 解密和正文捕获是需要许可证的功能;没有许可证时下面的一切仍能连上,但 HTTPS 行始终不透明、数据标签页无法选中。见许可证与激活。
  • Mac 上的Chute Dashboard——免费,不需要许可证。
  • 一根USB 线(推荐:网络上什么都不用开放,蜂窝网络下也能用),或者手机和 Mac 在同一个 Wi-Fi下。

如果你不想在 Mac 上装任何东西,Web 控制台在浏览器里显示同样的连接、正文和改写,手机上只需要 external-http-controller。下面的第 1–3 步对它同样适用;从第 4 步起,改按打开 Web 控制台操作。

1. 安装并信任 CA

在手机的配置编辑器里:MITM → 配置 CA → 生成新的 CA 证书,然后将 CA 证书安装到系统,再到设置 → 通用 → 关于本机 → 证书信任设置信任它。完整步骤——包括所有人都会漏掉的那一步——在 HTTPS 解密页。

你应该看到:证书页显示受信任的 CA 证书。如果显示的是不受信任,证书信任设置里的开关还没打开——打开之前后面什么都不会成功。

2. 声明要解密哪些主机

Chute 只解密你列出的主机。在编辑器的 MitM 分区(就是有配置 CA的那个)里,加上你要看的主机。从窄的开始——你在调试的那个应用的 API 主机——而不是 *:每多解密一个主机都要耗手机的 CPU,而且有些应用固定了证书,一解密就坏。*.apple.com 最好一开始就排除掉。

[MITM]
enable = true
hostname = api.example.com, *.example.net, -*.apple.com

语法——端口、- 排除、/path 限定——在 HTTPS 解密页。之后也可以在 Dashboard 的MitM 规则面板里边看效果边增删主机,再把有用的写进配置。

3. 打开解密和录制

在手机的控制面板上,两个开关:

  • MitM —— 对第 2 步的主机打开解密。
  • 流量捕获 —— 记录请求与响应正文(即 replica 设置)。不开的话,Dashboard 能看到每条连接及其规则与策略,但没有数据。

两个开关之后也都能从 Dashboard 的工具栏拨,所以现在忘了也没关系。除非写进配置([General] 里 replica = true、[MITM] 里 enable = true),否则重启后都不保留;而且在 iPhone 上这两项都是需要许可证的功能,没有许可证时不管配置怎么写,引擎都拒绝。

4. 允许 Dashboard 连接

在配置编辑器里:外部控制器。

  1. 打开外部控制器访问——它的脚注写着 允许 Chute Dashboard/Chute CLI 连接。
  2. 填一个端口(任意空闲端口;没有偏好就用 6170)和一个你自己的密码。
  3. 允许通过 Wi-Fi 访问:走 USB 就让它关着。只有你打算通过 Wi-Fi 连接时才打开——它会把监听器开放给这个网络上所有知道密码的人。
  4. 保存,然后启动(或重启)隧道。

你应该看到:控制面板显示外部访问端口:6170(你的端口)。如果没有这一行,说明隧道跑的不是保存后的配置——重启它。

5. 连接 Dashboard

把手机用线连上 Mac,手机上如果询问就点信任这台电脑。打开 Chute Dashboard;在新建仪表盘窗口里选通过 USB 连接,在设备:里选中这台手机,填第 4 步的端口和密码,连接。

改走 Wi-Fi 的话:选连接远程设备,主机填手机的地址(设置 → Wi-Fi → ⓘ里的 IP 地址),端口和密码同上。

你应该看到:一个新的 Dashboard 窗口,随着手机发起连接,它的活跃列表逐渐填满。如果是空的,用手机操作几秒钟。这一步可能出两种错:密码不匹配,以及手机不可达(地址错、Wi-Fi 访问没开、隧道没在跑)——这时窗口照样会打开,经 Wi-Fi 最后会显示连接已断开,经 USB 则一直停在连接中…,不断重试直到手机应答。细节在 Dashboard 页。

6. 检查工具栏开关

活跃列表顶部是第 3 步那两个开关在 Dashboard 里的样子:

  • 流量捕获应显示为停用流量捕获——录制已开。如果显示的是启用流量捕获,点一下。
  • 启用 MitM(N 条规则)应显示为停用 MitM(N 条规则)——解密已开,N 是第 2 步的主机数。如果按钮上没有「(N 条规则)」这个计数,主机列表没有到达手机:检查第 2 步并重启隧道。

7. 复现并找到请求

在应用里做那个你想看流量的操作。然后用列表上方的筛选栏收窄列表:在筛选主机/URL…里输入主机——工具栏的筛选字段是同一个搜索——或者勾上仅 MitM只留解密过的行。

你应该看到:你的主机的行在标记列有 M。方法列显示的是连接类型——HTTPS——而不是请求的动词:请求行和状态行分别在请求头和响应头的第一行。选中一行:请求头标签页有头、查询参数和 Cookie;响应数据显示正文,默认是文本,要看树就选JSON,要看图就选图片。

如果你的主机的行没有 M,说明这条连接没有被解密。按可能性从高到低:主机不在列表里(或模式匹配不上——api.example.com 不覆盖 www.example.com);MitM 关着;CA 装了但没信任(应用自己会报证书错误);应用固定了证书(排除这个主机,接受看不到里面);应用走的是 QUIC 上的 HTTP/3,无法解密——设置 block-quic 把它逼回 TCP。

如果行上有 M,但请求数据和响应数据无法选中,说明什么都没捕获到:这条连接运行时录制是关的(打开后再复现一次),或者主机被手机上的 [Replica] 过滤掉了。大于 2 MiB 的正文手机拒绝交出,对应的标签页里显示 无法加载此正文。

8. 保存你的发现

选中这些行,在其中一行上右键:将所选导出为 HAR…会把它们连同正文全部写进一个能用浏览器开发者工具、Charles 或 Proxyman 打开的文件;复制 curl 命令复制你右键点中那一行的请求,可以在 Mac 的终端里重放;将所选导出为 CSV…给电子表格用。数据标签页里的导出为 bin把一个正文按捕获时的样子存下来。

9. 改点什么(可选)

MitM视图的面板编辑的是运行中的引擎。两个快速实验:

  • Header 重写 → 为你的主机加一条规则:请求、添加、X-Debug = 1。复现;新的行带上 H 和 R,详情面板的命中的规则会引出你的规则。
  • 模拟响应 → 用你自己的内容应答某个端点。响应体的类型是个弹出菜单——file、text、base64 或 tiny-gif——旁边的输入框按类型填写:file 填路径(可用浏览…选择),text 填正文本身,base64 填它的 base64,tiny-gif 什么都不用填。file 路径是由手机读取的,而手机上没有 /Users/…,所以对手机请选 text 或 base64,就在这个面板里把内容写进规则本身——见 MitM 工具下的注意。被模拟应答的行带 K。

这里加的规则在隧道重启后就没了。哪条管用,就把它写进配置——参考页:URL 重写、Header 重写、Body 重写、模拟响应。

结束之后

  • 关掉流量捕获,或设 replica = false:录制开着的时间里,正文会一直在手机上累积。
  • 如果你打开过允许通过 Wi-Fi 访问,把它关回去。
  • 以后还要做就把 CA 留着;否则到设置 → 通用 → VPN 与设备管理里移除。
S. Smart Rabbit LLC © All Rights Reserved            updated 2026-09-29 21:57:05

本页为英文版的翻译。如内容有出入,以英文版为准。

results matching ""

    No results matching ""