前两周帮人排查一个 iOS 端的问题:App 里有个接口时好时坏,人在真机上复现了,但抓包这关就卡住了——电脑上装好代理工具、手机也连上了,流量就是抓不到,一查是证书绑定。这事的普遍性比想象中高:苹果手机抓包工具的选型,卡的从来不是"有没有工具",而是"越狱不越狱、证书装不装得上、pinning 认不认"。这篇把 iPhone 抓包的几条路线拆开,说说免越狱怎么把流量拿到手。
常见的两条路线,边界在哪
第一条是代理路线:电脑上跑 Charles 或 Fiddler 这类代理工具,手机设代理、装根证书(iOS 上要装描述文件),HTTPS 流量在代理这边解密成明文。日常调接口够用,两个典型卡点:做了证书固定的 App,代理签发的证书被客户端拒掉,直接抓不到;系统代理不生效的程序,流量根本不经过代理。第二条是越狱路线:越狱后装抓包插件,能拿到更多东西,但越狱的成本和风险(稳定性、系统升级受限、安全风险)大多数团队不愿意承担。
免越狱的第三种路径
抓包鹰 TraceEagle 在 iPhone 上提供的是第三条路:三种方法全程免越狱。证书安装可以扫码完成——为局域网内每个可用地址生成二维码,手机相机扫一下进安装页,iOS 还提供描述文件一键安装,装好后在设置里打开完全信任开关(这一步是 iOS 系统要求,任何工具都绕不开)。装上之后普通 App 的 HTTPS 流量直接解密,不需要 Mac。
证书绑定怎么破
iPhone 上遇到证书绑定,代理路线的通用解法就失效了。TraceEagle 的应用层抓包从程序内部直接取明文——数据在收发必经点上被取走,不经过中间人,证书绑定的校验发生在握手环节,取数在握手之后,所以 pinning 拦不到它。免越狱的前提下,这是处理证书绑定目标最直接的路径。
内嵌网页也能调
不少 App 的页面是内嵌网页,出问题时长什么样、脚本报什么错,光看请求看不出所以然。TraceEagle 的网页调试器用数据线连上 iPhone,直接调 App 内嵌的网页:看元素、跑脚本、下断点、翻 Cookie 和本地存储,不用给 App 加任何东西,调试完设备恢复原样。
实操顺序
真机上排查接口问题,推荐这个顺序:先扫码装证书,开代理抓包看常规请求;遇到抓不到的目标,判断是不是证书绑定,是就切应用层取明文;要看页面内部逻辑,用网页调试器。三种方法在同一个界面里看结果,iOS 免越狱、Android 端免装证书,跨平台的场景不用换工具。
苹果手机抓包工具选型,核心就一句话:普通目标走代理,顽固目标走应用层取明文,页面问题用网页调试器——三条路都不需要越狱,也不需要一台 Mac。