ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Fiddler抓包全攻略:电脑端、手机真机与雷电模拟器HTTPS解密实战

Fiddler抓包全攻略:电脑端、手机真机与雷电模拟器HTTPS解密实战 问你个问题你的手机App每次打开都和后端服务器说了哪些“悄悄话”换成工程师的说法就是它发了什么请求、带了什么参数、拿到了什么返回。https抓包工具就是干这个的把流量从设备里“请”出来放到电脑上看清楚。更进阶的玩法是用全局抓包软件把手机流量甚至安卓模拟器比如雷电模拟器里的流量也一并收进来。这一套东西最早是我做接口联调时被逼着学的。后端说“我接口没问题”前端说“我参数都传了”两边扯皮半小时我用抓包软件一看App发的是POST后端在等GET一分钟定位。后来做测试巡检、爬虫开发、小程序调试也全靠这套方法。这篇我直接把电脑端抓包、真机抓包、雷电模拟器抓包三条线完整串一遍原理讲透、步骤给全、坑也帮你踩平适合正在做接口调试、客户端测试、爬虫开发或者纯粹想搞懂手机流量到底是怎么回事的朋友。1. 想抓HTTPS先弄明白抓包在干什么1.1 HTTPS多了什么让抓包变难了早些年抓包很简单HTTP是明文协议工具装上就能看到全部内容。现在不一样了主流站点和App全面切到HTTPS流量是加密的你拿Wireshark去抓看到的是一堆看不懂的TLS握手包和密文连请求的URL都拼不出来。HTTPS比HTTP多出来的核心东西是TLS加密层。客户端和服务器要先完成一次“握手”协商出对称加密密钥之后传输的内容全部加密。我用一个生活化类比来解释HTTP相当于你寄了一张明信片路上每个经手人都能看见内容HTTPS相当于把明信片装进保险箱钥匙只有寄件人和收件人有。那抓包工具凭什么还能看因为它玩了一手“中间人”。它在你设备和服务器之间插了一脚对设备来说它假扮服务器对服务器来说它假扮设备。两端的加密隧道都正常建立但中间的抓包工具两头都能解密于是内容就在你眼前摊开了。这里最关键的一步是设备得信任抓包工具自己生成的那张“临时身份证”——根证书。这就是为什么所有HTTPS抓包教程都在反复强调装证书不装证书中间人就没法合法“拆箱”。1.2 四款主流抓包工具对比新手怎么选Windows平台上常见的抓包工具就那几款我直接给一张对比表看完你心里就有数了。工具平台核心特点最擅长的场景FiddlerWindows为主有Mac版基于HTTP代理HTTPS解密、改包、脚本扩展都强免费电脑端全局抓包、手机流量、模拟器流量教程最多遇到问题好搜CharlesWin/Mac/Linux界面清爽证书管理顺手稳定性好macOS开发者日常抓包前端联调WiresharkWin/Mac/Linux网卡级报文分析不依赖代理看TCP/UDP底层问题、协议分析不适合直接看业务请求mitmproxy跨平台命令行Python可编程能写脚本处理流量自动化测试、批量流量处理我做Windows端开发调试用得最多的就是Fiddler。原因很实在免费、功能全、支持命令行和脚本而且雷电模拟器、真机、电脑浏览器三端都能覆盖。Charles当然好但收费Wireshark不适合日常看接口mitmproxy对新手门槛高。所以这篇文章的主线工具就是Fiddler学会了它其他工具触类旁通。1.3 抓包工具的三大核心动作代理、证书、解密一个合格的HTTPS全局抓包流程本质上就三件事。你后面所有配置都是围绕这三件事展开的。第一件接管代理。Fiddler启动后会在本机监听一个端口默认8888同时把设备的系统代理指到127.0.0.1:8888。这样设备上所有HTTP和HTTPS请求都会先经过Fiddler而不是直接发出去。第二件生成并安装根证书。Fiddler第一次开启HTTPS解密时会自动生成一张CA根证书。设备信任了这张证书才认Fiddler现场签发的那些“临时域名证书”。这一步是HTTPS抓包和HTTP抓包最本质的区别。第三件解密和转发。客户端和Fiddler之间走一条加密通道Fiddler和服务器之间再走另一条加密通道中间的密文被还原成明文展示在会话列表里。这个设计还有个好处抓包工具完全不碰业务数据本身它只是“在中间看了一眼”。所以配置好之后你不需要改App代码也不用动服务器纯靠网络层的代理转发就能完成抓包。2. 电脑端全局抓包Fiddler完整配置流程2.1 安装Fiddler并开启HTTPS解密Fiddler的安装没什么好说的去官方渠道下载Fiddler Classic版本一路Next。装完第一件事不是急着抓包而是先打开HTTPS解密开关。打开主界面后进入Tools Options HTTPS你会看到几个选项。我把建议的勾选状态直接列出来Capture HTTPS CONNECTs勾选。这个选项决定Fiddler是否接收HTTPS连接请求。Decrypt HTTPS traffic勾选下拉框选from all processes。注意如果不选all processes部分系统服务或后台进程的请求就抓不到。Ignore server certificate errors勾选。开发调试时很多测试环境证书不正规不勾的话会频繁报证书错误。第一次勾选Decrypt HTTPS trafficFiddler会弹窗询问是否信任它生成的根证书点Yes。接着导出证书备用回到HTTPS设置页点Actions Export Root Certificate to Desktop桌面上会多出一个FiddlerRoot.cer文件后面电脑端、手机端、模拟器装证书都用得上。这里有个小细节改完HTTPS设置后最好完全退出Fiddler再重新打开。我遇到过不少次配置改了但是没生效一看Fiddler还挂着旧配置重启之后立刻正常。2.2 全局抓包模式接管系统代理很多人对“全局抓包”有误解以为是把网卡的所有流量都拦截下来。其实Fiddler的全局抓包主要靠的是接管Windows的系统代理。Windows上Chrome、Edge这类主流浏览器默认读取系统代理设置。Fiddler启动后会自动把系统代理设为127.0.0.1:8888所以你开浏览器访问任何网站流量都会先过Fiddler。你可以打开Windows设置在网络和Internet里找到代理会看到手动代理那一栏已经被填上了。想确认Fiddler是否正常工作最简单的办法是打开浏览器访问一个HTTPS网站比如常见的新闻门户或搜索引擎。切回Fiddler左侧会话列表应该刷出来一票请求里面既有CONNECT开头的连接记录也有具体的GET/POST请求。浏览器如果提示证书不受信任说明Windows还没信任Fiddler生成的根证书。双击桌面的FiddlerRoot.cer选择安装到“受信任的根证书颁发机构”按提示完成即可。这里有个容易踩的坑如果你电脑上装了多个代理类工具它们可能会互相抢系统代理设置。Fiddler开着别的工具把系统代理改走了Fiddler就抓不到包。所以抓包前先看一眼系统代理是不是指向127.0.0.1:8888这个是排查抓包失效的第一顺位检查项。2.3 看懂抓包结果会话列表与InspectorsFiddler装好、代理生效之后你会面对满屏的会话记录。看不懂这些记录抓包就是白抓。会话列表从左到右的几列比较关键ResultHTTP状态码200是正常404和500需要关注。ProtocolHTTP还是HTTPS。Host请求发给哪个域名。URL具体路径和查询参数。Process哪个进程发出来的请求比如chrome.exe还是某个App排查后台请求很有用。Body和Caching响应体积和缓存情况。想看一条请求的完整内容点一下这条会话右侧Inspectors面板会分成上下两块上面是请求(Request)下面是响应(Response)。请求里重点看Headers里的User-Agent、Content-Type以及Body里的表单参数或JSON。响应里重点看状态行、响应头以及JSON格式的返回内容。Fiddler还几个高频操作新手必须记住筛选域名顶部Filters页签勾选Use Filters在Host区域填入目标域名比如www.example.com。不筛选的话数据量大到你根本找不到目标请求。会话定位底部QuickExec命令行输入?关键字回车后自动筛选URL里包含关键字的会话比Filter更快。请求重放右键任一请求Replay Reissue RequestsFiddler会原样再发一次调试接口返场率极高。保存响应右键请求Save Response可以把返回内容存成文件做数据快照。3. 真机流量怎么抓手机代理与证书设置3.1 手机与电脑同一局域网配置WLAN代理电脑端抓包只是热身很多人真正想要的是抓手机流量。原理其实一样让手机上的请求也经过电脑上的Fiddler。第一步保证手机和电脑连在同一个局域网。比如电脑连的是家里路由器WiFi手机也连同一个如果你用的是手机热点电脑也必须连手机热点否则两边不在同一网络代理根本不通。第二步查电脑IP。Windows下打开命令行敲ipconfig找到当前网卡的IPv4地址记下来一般是192.168开头的内网地址。第三步确认Fiddler允许远程连接。进入Tools Options Connections勾选Allow remote computers to connect。这一步很多人漏掉不勾的话手机连上来会被拒绝。改完设置记得重启Fiddler。第四步在手机WiFi上配置手动代理。Android和iOS的入口略有差异但逻辑一致找到当前连接的WiFi长按或点详情进入修改网络把代理改成手动主机名填电脑的IP端口填8888保存。配置好后打开手机浏览器访问 http://电脑IP:8888 能打开一个Fiddler Echo Service页面就说明代理通了。页面上面有个FiddlerRoot certificate的下载链接点它下载证书。这个证书装不上后面HTTPS内容全是乱码所以下一步非常关键。3.2 Android证书安装与Android 7.0的坑Android手机装抓包证书这件事是新手翻车重灾区。原因有两个一是各家厂商的证书安装入口不一样二是从Android 7.0开始系统默认不信任用户安装的证书。先说入口。华为、小米、OPPO、vivo这些主流厂商一般都在“设置 安全 更多安全设置 加密与凭据 安装证书”里选择刚才下载的Fiddler证书文件。装的时候会让你设一个锁屏密码或确认PIN码按系统提示操作就好。再说Android 7.0的坑。7.0之后普通App默认只信任系统证书不信任用户手动安装的证书。也就是说你在手机上装了Fiddler证书浏览器流量能抓但很多第三方App的HTTPS流量依然解不开表现是Fiddler里能看到CONNECT连接但展开全是密文或握手失败。怎么解决两个方向。如果App是自己开发的最干净的做法是声明信任用户证书。在App工程的res/xml下新建network_security_config.xml内容如下network-security-config base-config cleartextTrafficPermittedtrue trust-anchors certificates srcsystem / certificates srcuser / /trust-anchors /base-config /network-security-config然后在AndroidManifest.xml的application节点上加上application android:networkSecurityConfigxml/network_security_config ...这样App在debug包或你自己签名的包里就会信任用户证书Fiddler解密立刻生效。如果是第三方App那就得把用户证书变成系统证书。这个操作需要root权限真机一般不折腾但正好是后面雷电模拟器的强项。通用做法是把Fiddler证书转成系统证书文件名push到/system/etc/security/cacerts目录下。具体命令我在模拟器章节一起给真机上流程一致只是需要一台root过的设备。3.3 iOS端抓包的差异iOS端的抓包流程比Android简单但有几处容易出问题。代理配置设置 Wi-Fi点已连接网络右侧的“i”图标拉到最下面配置代理选手动填电脑IP和8888。证书下载Safari打开 http://电脑IP:8888 下载FiddlerRoot certificate。和Android不同iOS下载后只是把证书文件存下来了还需要两步手动信任。第一步去“设置 通用 关于本机 证书信任设置”找到Fiddler证书打开完全信任开关。这一步漏掉的话Safari自己访问HTTPS都会提示证书无效。第二步如果抓的App在iOS 14以上系统还需要检查“设置 隐私 本地网络”把目标App的本地网络权限打开。这个权限不开启App可能不太乐意走你配置的代理。iOS有一点比Android舒服系统证书信任机制统一不像Android那样又分用户证书又分系统证书。代价是iOS上第三方App普遍做证书固定SSL Pinning的比例更高真遇到这种App抓包工具也束手无策只能靠专门的Hook方案这就超出普通教程范围了。4. 雷电模拟器怎么抓包从代理到设备信息4.1 模拟器抓包为什么值得学真机抓包环境复杂又是证书信任又是厂商设置而且很多App在真机上不好反复测试。雷电模拟器这类安卓模拟器用来抓App流量有几个实打实的优势。一是环境干净。模拟器是个独立的安卓系统证书、代理、环境变量随便折腾搞坏了新建一个模拟器实例就行真机可经不起这么折腾。二是自带root。真机想要root门槛很高但雷电模拟器在设置里一键就能打开root权限。有root就解决了Android 7.0证书信任问题——把证书挪进系统证书目录App的HTTPS流量就能正常解密。三是支持多开。雷电模拟器可以同时开多个实例每个实例里跑不同账号配合抓包工具横向对比测试多账号场景非常方便。四是恢复快。模拟器支持快照和备份抓包之前存一个干净快照测试翻车了秒回滚。4.2 雷电模拟器配置代理的两种姿势雷电模拟器抓包本质上和真机是一样的配代理、装证书。但模拟器有个优势可以通过ADB命令行直接操作效率翻倍。先备好环境。在雷电模拟器的设置里打开root权限和ADB调试然后在电脑上打开命令行确认能连上模拟器。雷电模拟器的ADB端口默认是5555看具体版本的说明一般可以直接连adb connect 127.0.0.1:5555连上之后两种配代理的方式随你选。方式一图形化操作。打开模拟器里的系统设置进入WLAN长按当前连接的WiFi修改网络代理改成手动主机名填电脑的局域网IP端口填8888。这个流程和真机几乎一样适合不熟悉命令行的朋友。方式二命令行操作。直接改安卓系统的全局代理设置一条命令搞定adb shell settings put global http_proxy 192.168.1.100:8888这里192.168.1.100要改成你电脑实际的局域网IP。改完可以用下面的命令验证代理是否生效adb shell settings get global http_proxy不想抓包了取消代理用这条命令adb shell settings put global http_proxy :0证书这一步强烈建议用命令行方案因为模拟器有root可以直接把证书丢进系统证书目录。先说常规的普通安装模拟器里打开浏览器访问 http://电脑IP:8888 下载FiddlerRoot certificate安装。这种装完属于用户证书Android 7.0以上很多App不认。再说系统证书方案。先把Fiddler的.cer证书转成系统可识别的格式并算出文件名hashopenssl x509 -inform DER -in FiddlerRoot.cer -out FiddlerRoot.pem openssl x509 -inform PEM -subject_hash_old -in FiddlerRoot.pem -noout第二条命令会输出一串hash值比如0a1b2c3d然后把pem文件改名成“hash值.0”mv FiddlerRoot.pem 0a1b2c3d.0接着push到模拟器的系统证书目录。雷电模拟器开着root可以这样操作adb root adb remount adb push 0a1b2c3d.0 /system/etc/security/cacerts/ adb reboot重启之后你在系统设置里看不到任何用户证书但所有App都会信任Fiddler的根证书。这个方案我用了很久实测下来比普通安装省心太多。4.3 抓不到模拟器流量先看设备信息识别雷电模拟器上装好证书、配好代理很多人会碰到一个奇怪现象网页能抓但某些App要么不联网要么抓到的请求不全。原因大概率是App识别到了模拟器环境主动走了一套降级逻辑比如不发核心请求、或者返回假数据。怎么识别模拟器的App会读取Build.MODEL、Build.MANUFACTURER、IMEI、Android ID、MAC地址这些设备属性发现和常见真机对不上就认为运行环境不对。解决办法是用雷电模拟器自带的设备信息修改功能。打开雷电模拟器的设置界面找到设备信息相关选项把手机品牌改成常见品牌、型号改成常见的真机型号重新生成IMEI和Android ID。改完重启模拟器再用Fiddler抓一次请求头里的User-Agent和设备参数就会变成真机形态。另外顺带说一句模拟器自带的广告推送会在抓包时产生大量广告SDK请求严重干扰定位目标流量。抓包之前先把模拟器设置里的推送广告功能关掉流量列表会干净一大截。我没法把里面涉及的每个App都测一遍但按我自己的经验雷电模拟器抓包遇到“请求缺失”“返回异常”这类问题九成是设备信息识别导致的先改设备信息再排查其他基本不会错。4.4 用命令行批量管理多开模拟器代理雷电模拟器抓包还有一个进阶玩法多开场景下的批量代理配置。你开了三四个模拟器实例每个都要手动去WiFi设置里配代理太累了。雷电模拟器的安装目录下有个命令行工具不同版本名字可能不一样常见的是ldconsole.exe或dnconsole.exe。在命令行里切到安装目录可以用它管理多开实例比如查看列表、启动指定模拟器这些命令网上能查到写法也直白。更实用的组合是先把代理配置命令封装成脚本然后对每个模拟器实例的ADB端口批量执行。雷电多开时每个实例的ADB端口不同常见的是5555、5557、5559这种递增规律通过adb connect进入之后剩下的操作就统一了。下面是个简单的思路Windows下可以用批处理或PowerShell脚本循环处理for port in 5555 5557 5559; do adb connect 127.0.0.1:$port adb -s 127.0.0.1:$port shell settings put global http_proxy 192.168.1.100:8888 done这样几个模拟器实例一次性配好代理再配合Fiddler里的域名过滤多账号、多端口的流量对比就很清晰了。这个操作听起来高级其实原理和手动配代理完全一样只是把重复劳动交给脚本了。5. 抓不到包怎么办高频问题排查与延伸技巧5.1 抓不到包按顺序排查这5项抓包配置不复杂但出问题的环节特别多。我见过太多人卡在“证书装了、代理配了就是抓不到”这个状态。按下面的顺序排查绝大多数问题都能找到答案。排查项检查方法和解决思路代理是否真的生效手机或模拟器里打开WiFi设置确认代理IP和端口模拟器可用adb shell settings get global http_proxy确认证书是否安装并信任Android去“加密与凭据”看用户凭据iOS去“证书信任设置”确认打开完全信任缺了就重装设备时间是否同步抓包工具签发的证书有效期和设备本地时间不一致时TLS握手会直接失败先同步时间是否有其他代理工具冲突关掉其他代理工具确认系统代理指向127.0.0.1:8888没有被顶掉App有没有做证书固定换用浏览器或自己开发的App测一下如果浏览器能抓只有某个App抓不到基本是SSL Pinning第五项经常被忽略。浏览器流量能抓、App流量抓不到很多人怀疑自己配置错了其实问题出在App本身。遇到证书固定的App普通用户没什么好办法要么找开发要debug包要么用hook方案绕过这部分我不展开不属于常规抓包范畴。5.2 高频报错与应对建议再整理几个大家在实操里最容易碰到的报错我都实际遇到过直接给结论。第一个设备上访问 http://电脑IP:8888 打不开。先别怀疑Fiddler配置。大概率是电脑防火墙拦了8888端口。解决方法是去Windows防火墙设置里添加入站规则放行TCP 8888端口或者放行Fiddler进程。加完规则重启Fiddler再试。第二个证书下载页面能打开但点击下载后报“404 not found”。这种情况通常是访问地址不对或者Fiddler版本不同导致证书下载路径变化。最稳妥的办法是直接在Fiddler的根证书导出功能里把证书导出成文件再想办法传到手机上安装而不是依赖手机浏览器下载。第三个Fiddler能看到大量CONNECT记录但展开后内容全是乱码。这说明HTTPS解密没成功。检查两点Tools Options HTTPS里有没有勾选Decrypt HTTPS traffic设备证书是否安装。大多数乱码问题根源都是设备没信任根证书。第四个模拟器里所有网页都打不开。常见原因是代理配置成功但证书没装或者代理的IP写成了模拟器自己的IP。记住一个原则代理的IP永远是电脑的局域网IP不是手机或模拟器的IP。第五个抓包时发现部分请求状态是502。这不是目标服务器挂了而是Fiddler转发出现问题或者代理链路上有超时。先清一下Fiddler缓存、重启Fiddler再不行就检查电脑网络是否正常。5.3 延伸技巧JMeter录HTTPS脚本与AutoResponder抓包工具除了看流量还能帮周边工具做很多事情。这里说两个高频延伸用法。一个是JMeter录制HTTPS脚本。用JMeter自带的HTTP(S) Test Script Recorder设置好代理端口后手机或浏览器走这个代理操作一遍业务JMeter就会把请求录成测试脚本。这个功能本身不复杂坑在于JMeter自己生成的根证书也需要被设备信任否则HTTPS站点录不下来。还有个更省事的路线先用Fiddler抓到请求右键Copy as cURL直接把cURL命令转成JMeter的HTTP请求比录制更精准。另一个是Fiddler的AutoResponder也就是接口Mock。比如某个接口在测试环境返回不稳定你可以先用Fiddler抓一次正常返回把响应体保存成文件然后在AutoResponder里添加规则把该接口的请求直接替换成本地文件内容。这样App不用改代码也不用依赖后端环境就能模拟各种返回场景对前端联调和异常测试非常实用。这个技巧的进阶版本是配合Fiddler脚本做弱网模拟在脚本里给每个请求加延时或丢掉部分响应用来测App在弱网环境下的表现。游戏上线前经常这么干工程上叫“弱网测试”。6. 实操中的几点体会6.1 先想清楚要抓谁的流量抓包最容易犯的错就是一上来就开Fiddler全局抓包结果电脑上微信、浏览器、各种后台进程的流量全涌进来界面刷得飞快整个人直接懵掉。我的习惯是动手之前先锁定目标。抓电脑端网页就在Fiddler里把域名过滤条件先写好抓手机App就在手机上把其他App先退出只留目标App在前台抓模拟器里的流量先把模拟器自带的广告推送关掉。流量干净了分析才有意义否则你只是在看数据洪流而不是在看问题。6.2 过滤器是抓包效率的分水岭我见过不少同事用Fiddler会话列表里几百条记录靠肉眼一条条翻翻到眼瞎。Fiddler的过滤功能用好了效率差距不是一倍两倍。最常用的是按域名过滤在Filters页签里填入目标Host列表立刻只剩你想要的那几条。再配合QuickExec输入框的?关键字搜索几乎是想看什么点什么。如果你发现抓包变成了一件煎熬的事大概率是过滤没用明白回去把过滤规则设好再来。6.3 抓包不只看改包重放才算入门很多人以为抓包就是“看”看完就完了。其实抓包最有价值的部分是改包和重放。所谓改包是把请求抓下来之后右键拖到Composer面板修改参数、请求头、请求体再重新发给服务器。服务器返回什么完全看你怎么改。我用这个方法排查过不少接口隐患比如把订单金额字段改大看后端是否校验、把用户ID换掉看有没有越权、把请求重复发十遍看幂等是否生效。这些操作不需要写一行代码纯靠抓包工具就能完成。抓包工具本身不复杂复杂的是搞清楚对象、装好证书、用好过滤。按这篇的顺序走一遍你也能把电脑、手机、模拟器三端流量都收到手里。等到你能熟练改包重放那一刻你会回来感谢Fiddler这个老朋友。
返回列表