抓包工具能看到请求列表但点开全是乱码、或者只能看到请求头看不到响应体——这个问题不少开发者都遇到过。原因通常集中在几个方向上,按顺序排查一般能定位。
HTTPS 证书问题
抓包工具抓不到 HTTPS 明文内容,最常见的原因是证书没装好或者没信任。Charles 需要在设备上安装 CA 证书,并且在 iOS 的"设置 → 通用 → 关于本机 → 证书信任设置"里手动开启信任开关。iOS 10.3 之后安装的描述文件默认不信任,这个步骤容易被忽略。
SniffMaster 的代理抓包模式同样需要安装证书,但流程中有操作引导。首次使用时会提示安装描述文件,按照步骤操作即可。如果关了提示,可以点帮助按钮重新查看设置流程。
如果证书已安装仍显示乱码,检查 Charles 的 SSL Proxying Settings 里有没有添加目标域名。不加域名的话 Charles 不会对这些域名做解密,只会透传加密数据。
非标准 HTTPS 端口
有些 App 的接口跑在 8443、9443 等非标准端口上。Charles 默认只对 443 端口做 SSL 解密,遇到其他端口需要在 SSL Proxying Settings 里加 *:8443 之类的规则,否则抓到了也是一片乱码。SniffMaster 的代理模式也需要类似配置,但暴力抓包模式不限端口。
SSL Pinning 和双向认证
如果 App 做了 SSL Pinning(证书绑定),Charles 的代理证书会被客户端直接拒绝,表现为请求列表里出现大量连接失败的记录,或者能看到请求但点开显示"SSLHandshake: certificate_unknown"。这种情况代理抓包工具基本都无效。
SniffMaster 的暴力抓包模式走 USB 直连,不经过代理,所以不受 SSL Pinning 影响。暴力抓包模式下 App 和服务器之间的 TLS 握手在设备和服务器之间直接完成,抓包工具只是旁路读取数据。
双向认证(双向 SSL)同理——服务端要求客户端出示证书时代理抓包工具没有客户端证书,TLS 握手必然失败。暴力抓包模式下握手在设备和服务器之间直接完成,旁路读取不受影响。
请求体/响应体不可见
SniffMaster 的暴力抓包模式下,对于未使用开发证书重签名的 App(如直接从 App Store 下载的应用),只能看到请求头和请求地址,请求体和响应体不可见。这是因为 iOS 对第三方应用的二进制有加密保护。如果需要查看完整的请求体,需要用开发证书对 IPA 重新签名后再抓取。
App 使用自有加密
部分 App 在应用层对数据做了二次加密。即使抓包工具解开了 HTTPS 的 TLS 层,看到的请求体仍然是经过 App 内部加密的二进制数据,而不是明文 JSON。这种情况需要在客户端代码层面分析加密逻辑,或者 hook 加密函数获取解密后的数据。
其他可能的原因
VPN 和代理工具冲突。手机上开启了 VPN 会导致代理流量走虚拟网卡而不是 Wi-Fi 代理通道,关掉 VPN 再试。Wi-Fi 代理配置被还原。部分 App 会检测代理状态并提示用户关闭代理,或者在切换网络后自动重置代理设置,需要重新配置。
共同学习,写下你的评论
评论加载中...
作者其他优质文章