ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

手机App抓包实战:两条技术路线与避坑指南

2026/9/11 6:57:15 拓冰建站 浏览量
手机App抓包实战:两条技术路线与避坑指南 做手机相关开发、测试或者安全研究的朋友肯定绕不开“抓包”这件事。每次群里有人问“手机软件抓包有哪些”下面回答都五花八门有人说用Fiddler有人说用Charles还有人说小黄鸟、Reqable、Wireshark。新人往往一脸懵下载了好几个工具折腾半天要么抓不到要么全是乱码最后连问题出在哪都不知道。这个现象背后藏着一个很关键的分岔路手机软件抓包一部分是“装在手机上的抓包工具”另一部分是“抓手机流量的电脑工具”这完全是两条不同的技术路线。如果你没搞清楚自己是哪条路、该走哪条路后面每一步都有可能踩坑。这篇文章我就把这两条路的底层逻辑、工具选型、完整配置流程和避坑经验一次讲透。1. 先想清楚一件事手机抓包到底要抓什么1.1 手机App联网的基本套路手机上的App几乎都是通过网络和服务器通信的普通开发调试场景下90%以上走的是HTTP/HTTPS协议。比如你打开一个新闻App它会向服务器请求文章列表接口你点击登录它会向服务器提交账号密码你刷短视频它会向服务器拉取视频地址。这些请求和响应的数据包就是我们要抓的对象。抓包的本质就是把App和服务器之间传递的这些数据截获下来然后解析给你看。这和快递物流的“中转站”很像App把快递请求交给驿站驿站再转发给快递公司服务器你在驿站翻看包裹内容就知道里面装了什么。但这里有一个关键差异HTTPS协议默认是加密的。你要是只截获一堆乱码那等于白干。所以抓HTTPS的包工具必须能做“中间人解密”——它要能冒充服务器和App通信同时冒充App和服务器通信两边都把密钥拿到手才能解开加密内容。这就是为什么抓包配置这么麻烦核心难点几乎都集中在这里。1.2 两条路的本质区别与选型思路“装在手机上的”和“抓手机的”这两类工具它们的区别不只是安装位置不同而是拦截原理完全不同手机端抓包工具直接在手机系统里运行通过本地虚拟回环接口、系统级Hook或者底层网卡驱动把本机App发出的网络流量拦截下来。它不需要额外的电脑设备但很多能力受限于手机是否root、系统版本和App本身的校验机制。电脑端代理抓包工具需要一台电脑和一个局域网环境手机和电脑连同一个WiFi手机里设置代理指向电脑IP所有流量先经过电脑上的工具由工具解密、分析后再转发。这是目前最主流、功能最强的方式Charles、Fiddler、Burp Suite都属于这一类。选哪条路主要取决于你的场景你只是临时想看某个App的接口返回身边没电脑那手机端工具更方便。你有电脑、需要完整分析请求头、Cookie、请求体、性能数据或者要反复修改请求做调试那电脑端代理抓包是正路。你要分析的是TCP/UDP这类底层协议或者手机自己发出的蓝牙、NFC数据那两条常规路径都不太够得用更底层的抓包方案比如特定网卡或系统级抓包工具。很多新手一上来就装了一堆工具其实不是工具不够好是路线没选对。后文我会把两条路分别展开讲你对照自己的需求选就行。2. 第一条路装进手机里的抓包工具2.1 手机端工具的适用场景与核心局限手机端抓包工具最大的优势是“随身携带、开箱即用”。你在地铁上遇到一个问题手机装个App打开悬浮窗就能看某个App的请求情况。很多嵌入式开发者和售后排查人员会习惯在手机上装一个因为现场不一定有电脑可用。但它的局限也很明显。手机端工具想截获完整的HTTP/HTTPS包通常依赖两种能力一种是系统代理配置或者是本地虚拟回环接口另一种是更高权限的系统级抓包需要root或越狱。很多免费工具只做到了第一种也就是类似代理转发能抓到HTTP明文但对HTTPS的证书信任和App自身的加固校验无能为力。而且当App不走系统代理、自己实现网络栈的时候这种工具基本就抓瞎了。有个点必须说清楚不要以为手机端工具装完就能抓所有App的HTTPS。它能不能解密取决于你有没有把它的证书装进系统信任区还取决于App有没有做证书校验SSL Pinning。这两关在电脑端工具里同样存在但手机端受限于权限往往更难解决。2.2 常见手机端工具盘点和选择逻辑手机端抓包工具我比较常用的有这几类HttpCanary小黄鸟Android平台老牌抓包App界面直观支持HTTP/HTTPS的抓取和重发可以按App过滤。有一定概率被部分加固App识别适合作基础分析和接口调试。Reqable原HttpCanary的开发者做的跨平台工具手机端、电脑端都有UI更现代支持HTTP/HTTPS抓包和调试国内开发者用得越来越多。它能导入导出HAR还能直接写API测试请求算是手机端工具里功能比较完整的。Packet Capture / PCAPdroid这类工具走的是本地虚拟回环接口不需要root就能拦截流量但很多只能看到协议概要没法解密HTTPS内容。PCAPdroid可以导出pcap文件配合Wireshark做底层分析。tcpdump类命令行工具需要root适合做底层包抓取输出的是原始pcap数据需要拖回电脑里分析。如果你的目标只是快速看一眼某个非敏感App的请求小黄鸟或者Reqable够用。如果要做底层网络分析PCAPdroid导出pcap会更合适。如果设备已经root还可以用LSPosed这类Hook框架对App做栈级抓包能绕过证书校验但这属于进阶玩法适合调试分析自己开发的应用门槛比较高。2.3 手机端抓包的几个关键细节手机端工具看起来省事但实际用起来有不少细节需要注意安卓7.0以上系统默认不信任用户证书。这是个硬性门槛。App的目标SDK版本越高越不信任你手动安装的证书。你装了抓包App的证书但它只存在于用户证书区很多App出于安全策略根本不会认它。解决办法只有两个要么把证书弄成系统证书需要root有一定技术门槛要么App自己在代码里允许调试证书。所以你会发现同一个App在老手机上能抓新手机上就抓不到。证书安装的路径不一样。iOS上要在“设置—通用—关于本机—证书信任设置”里开启完全信任否则就算装了描述文件也会解密失败。Android上则要区分Android 7以前和以后以后默认要额外处理。很多新手卡在这里。部分手机端抓包工具会影响到其他App的网络。因为它走的虚拟回环接口是全局的有的App检测到这种代理环境就直接拒绝联网了你以为是工具坏了其实是App在故意防抓包。手机端工具给我最深的感觉是适合“快速瞄一眼”不适合“深度调试”。如果你需要分析完整的请求链路、修改参数重放、对比不同环境下的响应差异我建议你用第二条路。3. 第二条路用电脑代理工具抓手机的流量3.1 中间人代理的原理与核心优势电脑端代理抓包的原理其实不复杂手机连上WiFi后在WiFi设置里把HTTP代理指到电脑的局域网IP和指定端口然后电脑上运行代理抓包工具如Charles、Fiddler、Burp Suite。手机发出的所有HTTP/HTTPS请求都会先到达电脑上的工具工具把这些请求接收下来解密、展示然后再转发给真正的服务器服务器返回的响应同样先经过工具再回传给手机。这个过程就是经典的中间人代理。它和手机端工具最大的不同是真正干活的是电脑算力、存储、分析能力都不是手机能比的抓包数据可以完整落盘还能配合各种脚本做自动化处理。比如你用电脑端工具可以按域名过滤只关注某个API服务器可以一眼看到请求的Header、Query、Body、Cookie可以看响应内容、转码格式、压缩类型可以把整个会话导出成HAR文件给同事分析还可以在工具里直接改请求参数然后重发。这些都是手机端很难完整做到的能力。3.2 主流的电脑端抓包工具怎么选电脑端工具很多不同场景选型也不同Charles老牌抓包工具支持Mac和Windows。界面清爽入门最快抓HTTPS时证书配置人性化日常接口调试首选。FiddlerWindows平台元老级工具功能非常全支持脚本扩展、断点修改、性能分析。缺点是界面老一些Fiddler Everywhere解决了跨平台问题但变成了订阅制。Burp Suite安全测试领域的事实标准抓包只是它最基础的功能更多用于渗透测试、修改请求、重放、扫描。如果只是开发调试用它有点大材小用但做接口安全测试非常合适。ProxymanMac平台的现代抓包工具界面漂亮支持iOS设备很友好对流量的分析和筛选做得不错。Reqable国产跨平台工具同时支持Windows/Mac/Linux/Android/iOS抓包、调试、Mock一体是最近几年非常值得关注的新选择。Wireshark严格来说它不是代理抓包工具而是一个协议分析器。它看不到手机App的HTTP请求层更适合分析TCP/UDP、TLS握手细节、WiFi空口数据等底层内容。如果你只是想看某个TCP连接的重传情况Wireshark才是正解。我的建议是日常开发调试首选Charles或Fiddler安全测试用Burp Suite想要国产工具体验、跨平台数据同步可以试试Reqable。工具不在多把一条路走通比装十个都重要。3.3 让手机信任证书这一关过不了一切白搭电脑端工具装上、代理也设置了但抓到的HTTPS流量全是CONNECT请求或者直接看不到内容这是新手遇到最多的问题。原因几乎都出在证书信任上。代理工具拦截HTTPS时需要动态生成一张“伪造”的数字证书来和手机通信。手机必须信任这张证书否则TLS握手会直接失败。所以你要做的第一步是把Charles或Fiddler的根证书下载到手机并安装。但这里有个连环坑安卓7.0之后系统对用户证书的信任策略收紧了默认只信任系统证书。所以就算你把代理工具的证书装进了手机的用户证书区很多App照样不认握手照样失败。想真正抓全HTTPS需要把证书安装到系统证书区而这需要root或者在手机开发环境里处理。所以很多开发者会在测试机上专门处理证书信任问题日常手机不太适合做深度抓包。iOS的情况相对友好一点但也有自己的脾气下载安装描述文件后必须在“设置—通用—关于本机—证书信任设置”里手动打开开关否则系统也是半信半疑。我见过很多人卡在这一步以为装了就完了结果死活解不开HTTPS。4. 实操完整走一遍手机HTTPS抓包流程4.1 场景准备与基础配置这一步我用Charles为例完整带你走一遍从零配置到抓到HTTPS请求的全过程。为什么选Charles因为它跨平台、界面直观、证书处理流程成熟适合作为入门到进阶的工具。你用Fiddler或Reqable的话核心步骤是类似的。准备工作其实就三件事一台电脑和一部手机连同一个WiFi。推荐用独立的局域网环境避免公司网络隔离导致手机访问不了电脑。电脑关闭防火墙对Charles所用端口的拦截。Charles默认端口是8888Windows和Mac都可能弹防火墙通知记得允许。手机和电脑之间能互相ping通。可以在电脑上开个CMD或终端ping一下手机的局域网IP确认连通。然后是配置Charles的SSL解密功能。打开Charles点击菜单栏的“Proxy—SSL Proxying Settings”勾选“Enable SSL Proxying”在Location列表里添加Host为*、Port为443。这一步的意思是对所有域名的443端口流量做解密。如果你只关心特定域名可以把*换成域名减少无关流量。4.2 手机代理与证书配置电脑端设置好后打开手机设置里的WiFi长按当前连接的WiFi选择“修改网络”或“代理设置”代理方式选“手动”主机名填电脑的局域网IP端口填8888。保存后手机的流量就准备往电脑上了。这时候你先别急着打开App先在手机浏览器里访问http://chls.pro/ssl下载Charles的根证书。下载完成后iOS打开下载的描述文件安装后去“设置—通用—关于本机—证书信任设置”把Charles证书开关打开。Android在“设置—安全—加密与凭据—安装证书”里安装CA证书选择刚才下载的文件。证书装好后试一下打开手机浏览器访问一个HTTPS网站比如一个普通的资讯页面。如果Charles界面上开始刷出这个域名的请求并且点击请求能看到明文响应内容说明代理和证书都通了。如果只看到一串CONNECT或者完全没流量先回头检查证书信任开关。4.3 开始抓包过滤、分析与保存正常情况下你现在打开手机上的任意AppCharles都会开始刷屏。我不建议你在流量大海里瞎翻要学会用过滤功能。在Charles底部有一个“Filter”输入框或者点击“Proxy”菜单里的“Recording Settings”按域名设置Include规则。比如你想分析的是App的登录接口服务器域名大概是api.xxx.com你就在过滤器里填这个域名界面只会保留该域名的请求。点击任意一条请求右边会出现六个TabOverview概览、Contents内容、Summary摘要、Headers请求头、JSONJSON视图等。我最常用的是Headers和JSON视图Headers里能看到请求方法、路径、Header、Cookie、请求体参数JSON视图里能直接看到格式化的接口返回。如果你要看完整的Header原始信息切到“Contents”里的Raw视图即可。分析累了想保存数据右键一条请求可以选择导出想导出整个会话在工具菜单里选择“Export Session”为HAR文件。HAR文件是通用的HTTP归档格式发给同事后他们用Charles、Fiddler、浏览器开发者工具都能打开。5. 高频问题排查与避坑经验5.1 抓到流量但都是CONNECT大概率是这一步错了很多人配置完成功连上代理也能看到一串流量但点开全是CONNECT api.xxx.com:443看不到具体内容。这说明你的代理工具根本没有参与解密只是做了纯粹的转发。最常见的两个原因一是SSL Proxying里没有设置解密规则二是证书信任没生效。前者去“Proxy—SSL Proxying Settings”里把Enable勾上并添加规则就行后者去手机证书信任设置里看是不是漏了开关。还有一个容易被忽略的点如果手机里装了多个代理工具或安全软件可能会抢占443端口或者覆盖代理设置把其他代理类工具卸载或停用再试试。5.2 App直接不走代理怎么办有些App在网络层就直接不走系统代理你设置了代理它当没看见流量直接从WiFi发出去了。这常见于几种情况App用到了非HTTP协议比如UDP自定义协议App代码里专门开了“忽略代理”App检测到代理环境后主动断开。遇到这种情况常规代理抓包就没辙了你得换思路如果App是自己开发的检查网络库的代理设置确认没有把Proxy置空。如果是分析第三方App有root权限的设备上可以用透明代理工具把流量强制转发到抓包工具但这涉及更底层的网络配置操作门槛比较高。还有一部分App走的是Flutter/Dio等自带网络栈的框架这类框架默认不走系统代理需要在代码里手动支持代理配置才能被Charles这类工具抓到。如果你是开发者调试这种App时要给Dio单独配代理地址否则抓包工具始终是瞎子。5.3 HTTPS解密失败证书、版本、校验三板斧解密失败的表现一般是手机App报网络错误或者Charles里出现SSLHandshakeException之类的报错。排查顺序我建议按这三个方向来第一板斧是证书本身的问题。确认手机安装的证书和电脑上工具的根证书是同一个版本证书如果重新生成过手机端必须重新下载。第二板斧是证书信任等级的问题。Android 7以上一定要确认App是否信任用户证书如果系统版本的策略把用户证书挡在门外那就要考虑root后做系统证书处理或者换一个允许调试设备的开发环境。第三板斧是App自己的证书校验。如果一个App做了SSL Pinning它只信任自己内置的服务器证书任何中间人证书都会被拒绝。这类App常规抓包是抓不了的除非你用Hook工具动态绕过校验这属于移动安全调试领域的内容适合在合规的测试场景里研究。另外有一种情况特别容易误导人同一个App在iOS上能抓在Android上就不能抓或者反过来。这不是工具坏了纯粹是两端对证书信任的处理策略不同遇到这种可以先分别看两端TLS握手的详细日志基本就能判断卡在哪一步。5.4 其他容易忽略的小坑我把自己这几年反复踩过的几个小坑也整理出来代理端口被占用。Fiddler默认8888Charles默认8888有时候你装了多个工具或者某些服务也监听8888导致抓包工具启动异常。可以先手动改成其他端口比如8889。电脑和手机不在同一网段。家里路由器开了AP隔离或者公司访客WiFi默认隔离终端导致手机根本访问不到电脑。判断方法手机浏览器访问http://电脑IP:8888能打开就说明通打不开说明网络隔离了。手机系统时间不准确会导致证书验证失败。TLS握手会校验证书有效期如果手机时间偏差太大证书会被判定为无效。先校准手机时间再排查其他问题。抓包完成后务必关闭手机代理。很多人抓完包忘了关代理第二天发现手机上所有App都连不上网以为手机坏了。其实就是因为代理还指向那台已经关了电脑。最后分享一点经验如果让我给新手一个通用建议那就是别贪多先选定一条路线把它跑通。我的个人习惯是日常调试优先打开电脑上的Charles配合一部专门用于测试的安卓手机提前处理好证书信任问题临时只能在手机上处理的时候才会用Reqable或小黄鸟这类工具应急真正涉及底层协议的时候我才会回到Wireshark。手机抓包这个技能入门不难但真正用顺需要积累经验。尤其是HTTPS证书、SSL Pinning、不同系统版本的处理方式只有多上手磨几次才能真正理解。按照上面这套流程走一遍你大概率就能越过大多数人卡住的那道坎从“抓到包”进阶到“看得懂包、用得了包”。