手机抓包完全指南:两条技术路线与证书配置全解析
先说明一个很多人容易搞混的点手机抓包从来不是“装一个App就能通吃”的事。我刚入行那会儿为了抓一个App的接口请求先在手机上装了个抓包软件结果发现装上之后只能抓到浏览器和部分应用的流量真正要调的那个App死活不放包出来。后来才搞明白我一直纠结错了方向——手机抓包这件事从根上就分成两条完全不同的路一种是“装手机上的”抓包工具一种是“抓手机的”抓包工具。这两条路的原理、适用场景、能解决的问题甚至踩坑的方式都不一样。这篇文章我就把这两条路彻底讲透。从底层原理到工具选型从证书配置到高频翻车现场一次性说清楚。不管你是刚接触抓包的测试新人还是被微信小程序、Flutter应用抓包折磨的开发同学读完应该能少走很多弯路。1. 先搞清楚手机抓包的两条技术路线1.1 装在电脑上抓手机的流量第一条路的主体是电脑上运行的抓包工具常见的有Fiddler、Charles、Burp Suite、Wireshark这一大类。它们的核心工作方式是电脑上的工具充当一个中间节点手机上的网络请求先被引导到这个节点上工具把请求内容解密、展示给你看然后再由这个节点把请求转发给真正的服务器。服务器返回的数据也经过同样的路径回到手机。整个过程可以用一个快递中转站来类比手机把包裹交给中转站中转站有权开箱检查、拍照记录然后重新打包发给收件人收件人寄回来的包裹中转站同样先检查再转交。这种模式的好处是工具运行在电脑上性能充足处理能力强可以做请求重放、断点修改、响应篡改等高级操作适合开发调试、接口分析、安全测试这类需要深度操作的场景。缺点也很明显必须有一台电脑手机和电脑要在同一个网络环境下而且需要手动配置手机的流量走向。1.2 装在手机上抓本机的流量第二条路是直接在手机上安装抓包应用比如安卓上的HttpCanary大家俗称小黄鸟、iOS上的Stream以及跨平台的Reqable移动版。这类App的原理是运行在手机上时通过系统提供的虚拟网络接口能力在手机内部创建一条流量捕获通道让本机所有App的网络数据都经过这个通道然后由抓包App解析展示。打个比方这就好比在自己房间里装了一个摄像头专门记录你出门带了什么、回来带回来什么。你不用依赖快递中转站也不需要别人配合随时随地想看就看。这种方式的最大优势就是方便不带电脑拿起手机就能抓包特别适合现场排查、在客户现场临时看个接口、或者在没有电脑的条件下做快速验证。劣势在于手机性能有限处理大流量时容易卡顿而且很多抓包App在HTTPS解密方面受系统证书限制遇到加了证书校验的App往往无能为力。1.3 还有一条更底层的路报文级抓包除了上面两条路还有一条更底层、适用范围更广的技术路线直接在网卡层面抓取原始数据报文。代表工具是tcpdump和Wireshark。这条路不依赖中间人证书也不需要手机信任任何CA而是直接把网卡上经过的数据包原封不动地抓下来再通过Wireshark进行协议解析。它的视野比HTTP/HTTPS层面的抓包要广得多能看TCP三次握手、DNS解析过程、蓝牙协议栈交互甚至定位网络超时是发生在哪一跳。报文级抓包的代价是门槛更高。你看到的不是“请求URL返回JSON”这种友好结构而是密密麻麻的报文列表和十六进制数据需要具备一定的网络协议基础才能读懂。所以我对普通业务调试的建议是先走前两条路实在搞不定再考虑报文级。2. 抓手机这条路五类主力工具怎么选2.1 FiddlerWindows玩家的老朋友在Windows平台上Fiddler是很多人的启蒙工具。它是免费软件安装简单打开就能监听本机所有HTTP请求。老版本叫Fiddler ClassicWindows上直接用新版本叫Fiddler Everywhere做了跨平台支持但收费我实测觉得免费版就够用。用Fiddler抓手机的配置思路很标准打开Fiddler后在Tools-Options-HTTPS里勾选Decrypt HTTPS traffic然后菜单栏找到Allow remote computers to connect不同版本位置略有差异默认监听端口是8888。手机端在WiFi设置里把代理设为“手动”主机名填电脑的局域网IP端口填8888。此时用手机浏览器访问 http://电脑IP:8888 会看到Fiddler的证书下载页面安装证书后就能抓HTTPS了。Fiddler比较有特色的地方是FiddlerScript脚本引擎可以通过写一段C#风格的脚本自动修改请求或响应。比如你想把某个接口的返回值统一加一个字段写几十行脚本就能跑起来这在批量处理场景下非常省事。缺点是界面相对老旧跨平台体验一般Mac用户通常不会首选它。2.2 Charles跨平台调试的标杆Charles是我日常使用频率最高的抓包工具之一。它是Java开发的Windows、macOS、Linux通吃界面清晰功能逻辑也非常顺手。在抓手机这条路上Charles的配置路径几乎是教科书级别的手机连上同一个WiFi代理指向电脑的局域网IP和默认端口8888然后电脑端Charles会弹出一个提示框问你是否允许来自该设备的连接点击Allow即可。HTTPS解密是Charles的强项菜单Help-SSL Proxying-Install Charles Root Certificate on a Mobile Device or Remote Browser会给出清晰的安装指引。手机上访问chls.pro/ssl下载证书iOS用户在下载完描述文件后还要去“设置-通用-关于本机-证书信任设置”里把Charles根证书的完全信任开关打开这个步骤漏掉的人非常多。Charles的另一个杀手锏是Map Local和Map Remote功能可以让你把某个接口的响应映射到本地文件或者把请求重定向到另一个地址这对前端Mock接口、联调环境切换特别有用。它还有一个Rewrite功能能按规则自动修改请求和响应的任意部分。说实话只要不是做安全渗透测试Charles基本能覆盖日常开发调试的全部需求。2.3 Burp Suite与Yakit从安全测试视角看抓包如果你需要从安全测试的角度抓包Burp Suite是行业标准几乎没有替代品。它和Charles/Fiddler最大的区别在于Burp更像一个“拦截代理工作站”不只让你看流量更鼓励你主动修改和重放请求。它的Proxy模块负责抓包Repeater模块让你手动重发请求并观察响应的变化Intruder模块能做参数遍历和爆破Scanner模块还能自动扫描漏洞。Burp抓手机的配置思路类似在Proxy-Options里确认监听端口默认8080手机设置代理指向电脑IP和该端口。手机访问 http://电脑IP:8080 会看到Burp的证书下载页面下载并信任CA证书后就能解密HTTPS流量。注意Burp导出的证书是der格式安卓上直接安装可能会提示无法识别的文件要先转成cer或crt格式再安装。另一款值得关注的是国产工具Yakit。它是近年火起来的综合安全测试平台内置了抓包、中间人代理、漏洞扫描、插件市场等功能。Yakit的MITM模块做得很接地气界面是全中文的插件生态也很活跃很多安全测试模板开箱即用。对于想入门安全测试、又觉得Burp的英文界面和复杂度有压力的人来说Yakit是个不错的起点。2.4 Wireshark与tcpdump报文级抓包的正确打开方式当问题已经突破HTTP层比如要排查TCP重传、分析DNS解析超时、看蓝牙通信内容那就轮到Wireshark和tcpdump出场了。Wireshark是图形化报文分析工具本身不负责“产生”抓包数据而是负责“读”。在手机抓包场景里有两种常见姿势第一种手机上运行tcpdump命令把抓到的数据包保存成pcap文件然后导出到电脑上用Wireshark打开。这要求手机拿到root权限或者至少在Termux环境里装一个tcpdump二进制。命令很简单tcpdump -i any -s 0 -w /sdcard/capture.pcap跑一段时间后CtrlC结束把capture.pcap导出来就行。第二种手机开启USB网络共享把网络连接通过USB线分享给电脑电脑端Wireshark选择对应的共享网卡直接捕获流量。这种方式不需要root但对网络环境有要求抓到的主要是USB共享网卡上的报文。顺便提一个热搜里频繁出现的问题Python环境下用pyshark无法抓包。这通常是因为pyshark其实不是直接抓包而是调用了Wireshark自带的tshark命令行工具来采集和解析。Python 2.7那套老环境连新版tshark都不一定兼容更别说pyshark了。建议直接用Python 3.8以上的环境和最新版pyshark再确认tshark已经正确安装并加入了系统PATH基本上就能解决。2.5 新一代工具Proxyman与ReqableProxyman在苹果生态用户里口碑很好。它的界面是原生的运行流畅内置了针对iOS模拟器的一键证书安装能力不需要你手动拖拽描述文件。对于macOS配iPhone这种组合Proxyman的配置体验比Charles还要顺滑断点调试和请求改写功能也做得相当细致。Reqable则是国内团队做的一款新秀我觉得它是目前少有的“两条路都占”的工具。Windows、macOS、Linux、Android、iOS全平台覆盖在电脑上是抓手机流量的PC工具在手机上又变成了本机抓包App而且界面现代、中文友好、免费版的功能足够日常使用。如果你厌倦了Charles和Fiddler的老式界面又想一套工具打通电脑和手机两端Reqable值得认真试试。下面是我个人对抓手机路线主力工具的一个快速选型表工具运行平台核心场景上手难度费用Fiddler ClassicWindows日常HTTP/HTTPS调试、脚本批量处理低免费CharlesWin/Mac/Linux移动端接口调试、Mock、Rewrite低付费试用30天Burp SuiteWin/Mac/Linux安全测试、请求重放、漏洞扫描高社区版免费YakitWin/Mac/Linux安全测试、MITM综合平台中开源免费WiresharkWin/Mac/Linux底层报文、协议分析高开源免费ProxymanMac/iOSmacOSiPhone组合调试低免费版付费版Reqable全平台跨端抓包、API调试低免费版够用3. 装在手机这条路移动端抓包App实测3.1 安卓首选HttpCanary小黄鸟HttpCanary是安卓上最有名的抓包App之一因为图标是一只小黄鸟大家都叫它小黄鸟。它的实现原理是在手机内部创建一条虚拟网络接口通道让本机流量经过这个通道再转发出去因此不需要root就能捕获大多数应用的网络请求。安装后需要手动安装HttpCanary自带的CA证书才能在抓包界面里看到HTTPS的内容。实际使用中有一个必须提醒的坑Android 7.0以上系统默认不信任用户安装的CA证书所以小黄鸟在抓第三方App的HTTPS流量时经常会出现“抓得到请求但解不开密”的情况列表里全是一堆CONNECT请求。解决办法有几个方向一是手机root后把用户证书移动到系统证书目录二是用Magisk的证书模块一键安装到系统区三是配合LSPosed框架运行绕过证书校验的模块。这些操作只在你有权限、有授权的测试设备上做没必要拿主力手机去折腾。小黄鸟的界面逻辑很适合快速看接口顶部是请求列表点开任意一条请求下方分Request和Response两个Tab能看请求头、请求体、响应内容和响应头还带重放、编辑、导入导出功能。实测下来它在日常查看接口、调试自研App请求场景下非常顺手。3.2 iOS上的选择Stream与Reqable移动版iOS由于系统限制可选择的本机抓包工具比安卓少一些Stream是其中比较成熟的一个。Stream同样采用创建本地虚拟网络通道的方式捕获流量安装后需要在设置里安装描述文件配置代理指向本地端口。配置完成后打开任何AppStream里就能看到对应的HTTP/HTTPS请求。Stream的界面比较简洁支持按域名搜索和过滤也能把某次请求导出成cURL命令方便直接复制到终端里复现问题。对iOS开发者来说这是一个很轻便的辅助工具。不过iOS上同样的证书信任问题也存在App Store审核又不允许安装根证书这种敏感操作所以Stream对很多强校验App依然无能为力。抓不到的时候不要怀疑是App坏了先检查“设置-通用-关于本机-证书信任设置”里是否把Stream的证书完全信任打开了。Reqable移动版也是一个好选择它弥补了Stream在多平台上的不足数据还能和电脑端的Reqable互通导出分析都很方便。比如在手机上用Reqable抓了一遍请求可以直接把会话导出回到电脑上接着看这个工作流对出门在外临时抓包再回工位分析的用户来说特别实用。3.3 蓝牙怎么抓红米K50这类安卓机也能干热搜里有一个“红米K50怎么进行蓝牙抓包”的问题不少人以为蓝牙抓包必须买昂贵的嗅探硬件实际安卓系统自带了一个隐藏的蓝牙抓包能力开发者选项里的“蓝牙HCI信息收集日志”有些厂商叫“开启蓝牙HCI日志”。打开这个开关后系统会把蓝牙协议栈的所有交互记录写入一个btsnoop_hci.log文件。具体操作步骤在开发者选项里找到蓝牙HCI日志相关选项并打开之后关掉蓝牙再重新打开一次确保日志从新的连接开始记录然后正常连接你的蓝牙设备、出现异常现象后回到开发者选项关闭日志。日志文件一般在 /sdcard/MIUI/debug_log/common/ 或者通过adb命令adb bugreport打包导出。拿到log文件后用Wireshark打开选择蓝牙解析协议就能看到HCI层、L2CAP层以及ATT/GATT层的交互内容定位设备反复断开、配对失败、蓝牙服务发现异常等问题非常有效。这条路线本质上是“系统自带的报文级抓包”不依赖第三方App也不需要root是排查蓝牙问题的高性价比方案。3.4 root与无root的分岔路LSPosed与系统证书在装手机这条路里root与无root是完全不同的两种体验。无root状态下你能做的就是在系统允许的范围内抓取明文流量和解密那些信任用户证书的HTTPS请求。一旦遇到App启用了证书固定SSL Pinning或者不信任用户证书的情况无root基本束手无策。root之后的玩法就不一样了。首先你可以把用户CA证书直接复制到系统证书目录让所有App都默认信任你的工具证书这一步用Magisk模块或手动挂载system分区都能实现。其次你可以安装LSPosed框架这是一个运行在root设备上的模块化框架支持运行各种Xposed风格模块其中就包括绕过证书校验的模块。装了之后那些原本连HTTPS响应内容都看不到的App瞬间就能被顺利解密和查看。这类技术是安全研究和授权测试中的常规手段但一定记得只在你自己拥有或已获得明确测试授权的设备上使用。4. 核心实操CA证书、HTTPS解密与高频翻车点4.1 三条路都绕不开的证书关不管走哪条路只要你想看HTTPS的明文内容就绕不开证书信任这个问题。抓包工具把自己伪装成目标服务器跟手机建立了一条加密通道为了让这条通道不被手机拒绝抓包工具必须让自己的根证书被手机信任。换句话说你需要在手机上安装抓包工具生成的CA证书。手机信任了工具工具才能作为中间人解密流量。这里可以沿用快递中转站的比喻中转站想要检查你的快递包裹光打开自己的仓库大门还不够必须让小区的门卫系统认可它持有的“总钥匙代管证明”才行。如果门卫不认包裹到了中转站门口就会被原路退回也就谈不上什么检查了。实际操作中我见过太多人栽在证书这关上证书下载了没安装、安装了没信任、信任了但装错位置、装对了但系统版本太高不认用户证书。这四个问题几乎覆盖了90%的“为什么我抓不到HTTPS”的求助帖。4.2 手机上安装证书的完整流程与Android 7的坑以Charles为例完整的证书安装流程是这样的电脑端Charles正常启动并开启了SSL Proxying。手机连接和电脑同一个WiFi设置HTTP代理指向电脑IP、端口8888。手机浏览器访问chls.pro/ssl下载Charles根证书。安卓手机进入设置-安全-加密与凭据-安装证书选择下载的证书文件并确认。iOS手机下载描述文件后去“设置-通用-描述文件”里信任该描述文件再去“设置-通用-关于本机-证书信任设置”里打开完全信任开关。重点来了以上步骤在Android 6.0及以下版本基本够用但在Android 7.0及以上即使你把Charles的证书装进了用户信任区很多App依然不会信任它因为系统默认只信任系统内置的CA证书。说白了你把钥匙装进了小区门卫的抽屉里但住户的门锁只认物业原配的系统钥匙。解决办法有三种第一种把用户证书升级为系统证书这通常需要root具体做法是计算证书的哈希值并重命名复制到 /system/etc/security/cacerts/ 目录下第二种如果你是自研App的开发者在App的networkSecurityConfig里显式信任用户证书这样调试版本就能正常抓包第三种用LSPosed这类框架配合绕过证书校验的模块适合处理第三方App的调试场景。4.3 微信小程序、Flutter Dio、短信接口怎么抓微信小程序抓包是高频问题很多人在PC工具上装了证书却抓不到小程序发出的请求。原因有几个第一小程序运行环境在微信内部它有很多自己的网络策略第二小程序的WebView默认不信任用户CA证书第三代理设置可能只对系统浏览器生效对微信进程不生效。实操建议是优先用电脑端的微信登录小程序然后让电脑的抓包工具直接抓本机流量这样避开了手机代理配置问题。如果一定要在手机上抓先把微信升级到较新的版本再确保证书已经安装到系统信任区同时尝试在电脑端Wireshark或Charles里设置对特定域名的SSL解密。Flutter应用抓包是另一个热点尤其是用了Dio网络库的项目。很多人在Flutter应用里发现抓不到包原因是Dio底层使用的HttpClient默认不读系统代理或者强制忽略了代理设置。解决办法是在启动Flutter应用前通过HttpOverrides全局替换HttpClient的创建方式手动指定代理地址示例代码如下import dart:io; class MyHttpOverrides extends HttpOverrides { override HttpClient createHttpClient(SecurityContext? context) { return super.createHttpClient(context) ..findProxy (uri) { return PROXY 192.168.1.100:8888; }; } } void main() { HttpOverrides.global MyHttpOverrides(); runApp(MyApp()); }这个配置跑起来后Flutter应用的所有请求就会统一走电脑抓包工具的代理端口。要注意的是如果Dio自己在代码里通过BadCertificateCallback或者SecurityContext做了证书校验还需要单独处理证书信任逻辑否则HTTPS请求依然会握手失败。至于短信接口抓包很多测试同学问我怎么抓验证码短信的回调。这类问题的场景通常是你在测自己的服务端怎么与短信平台交互验证码发送和回调都是服务端到服务端的请求跟在手机上抓包没太大关系。正确的做法是在你的服务器上抓出站请求或者在短信平台后台查看回调日志。手机上能抓到的只是App把手机号提交给服务端的那个请求以及服务端返回的“发送成功”响应验证码本身在服务端返回里一般不会明文出现。5. 常见问题与排查技巧实录5.1 高频问题速查表我把这些年被问得最多的抓包问题整理成了一张速查表直接对着查就行现象大概率原因解决方向手机连不上电脑抓包工具同一WiFi下AP隔离、电脑防火墙拦截、代理端口不对换手机热点、放行端口、核对局域网IP和端口代理设置后所有App断网代理IP或端口填写错误工具未监听在电脑上确认端口监听状态重新填入正确代理装了证书还是解不开HTTPSAndroid 7不信任用户证书转系统证书、配置networkSecurityConfig或使用LSPosed模块iOS抓不到HTTPS请求证书完全信任开关没打开设置-通用-关于本机-证书信任设置里打开完全信任HTTPS列表全是CONNECTSSL Proxying未开启或证书未装好开启解密重新安装并信任证书微信小程序抓不到请求代理不生效、证书不受信、入口不对电脑端跑小程序并抓本机流量Flutter/Dio请求不到代理HttpOverrides未配置Dio不走系统代理通过HttpOverrides指定代理Wireshark打开全是一堆看不懂的包报文章节、没有按流过滤、未解密SSL先用tcp.stream过滤器再考虑TLS密钥导出蓝牙抓包找不到日志HCI日志未开、日志开关后未重新开关蓝牙开发者选项打开HCI日志重启蓝牙再复现问题pyshark解析失败Python环境太旧、tshark未配置换Python 3.8安装新版pyshark配置tshark路径5.2 我踩过的几个坑第一个坑是“公司WiFi下手机连不上抓包工具”。一开始我以为是电脑防火墙的问题折腾了半天放行端口也没用后来才发现公司路由开了AP隔离手机和电脑虽然连在同一个WiFi名下面但彼此是打不通的。这个场景最容易让人怀疑配置也更浪费时间。建议先做一步最简单的验证手机浏览器直接访问 http://电脑IP:8888 能打开证书下载页说明通打不开就是网络层的问题。如果AP隔离了直接改用手机热点手机连电脑热点或者电脑连手机热点绕开路由器限制。第二个坑是“iOS证书装了三遍还是抓不到”。有次帮同事排查他信誓旦旦说证书已经装好了结果我去看发现他只做了三步里的两步下载描述文件、在描述文件里点击信任唯独漏了最关键的那一步——去“证书信任设置”里把完全信任开关打开。这一步在iOS的“设置-通用-关于本机-证书信任设置”下入口藏得深但没打开就等于白装。从那以后我给任何人讲iOS抓包都会反复强调这三步必须走完。第三个坑是“分不清是SSL Pinning问题还是证书配置问题”。当你抓到一堆CONNECT请求但看不到实际内容时不要急着怀疑自己配置错了。先用系统浏览器访问一个普通HTTPS网站如果能正常解密说明工具和证书配置都没问题剩下的就只有一个快被外科漏掉的可能目标App做了SSL Pinning。这时候再去上hook或者系统证书的方案才有的放矢不要从头开始瞎折腾。第四个坑来自调试习惯很多人抓包只看请求忽略响应和时间线。实际上接口性能问题的排查往往要同时看请求发送时间和响应返回时间才能在时间线上定位瓶颈发生在哪个环节。Charles和Fiddler都有时间线视图Reqaable也有请求耗时统计建议多看几眼。结尾的几句实在话手机抓包这条路我摸了几年才总结出最适合自己的工作流日常开发调试用Reqable或Charles电脑端为主理由是这个组合跨平台、界面顺手、Mock和Rewrite够用出门在外没有电脑的时候用HttpCanary或Stream应急一旦问题下沉到TCP或者蓝牙层面就切到Wireshark和系统HCI日志实验室里的root测试机长期装着LSPosed专门处理那些加了证书校验的应用。如果你刚开始学别急着把所有工具都用一遍先把“装电脑上抓手机”这条路打通把证书信任这个核心概念彻底搞明白再横向扩展。因为抓包这件事80%的坑都集中在流量走向和证书信任上原理通了工具只是外壳。最后再分享一个技巧抓包时不要只盯着请求内容响应和顺序往往同样关键很多问题其实是服务端逻辑造成的抓包工具扮演的角色只是帮你把看不见的东西变成一个一个可以检视的证据。