尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

Fiddler+雷电模拟器HTTPS抓包实战:从证书信任到流量解密

发布时间:2026/9/17 9:57:38

资讯中心
01
ARTICLE

Fiddler+雷电模拟器HTTPS抓包实战:从证书信任到流量解密

Fiddler+雷电模拟器HTTPS抓包实战:从证书信任到流量解密
最近在折腾接口调试的时候发现身边还是有很多人一碰到HTTPS就抓瞎——明明开启了抓包工具看到的却是一堆加密乱码或者好不容易电脑上能抓了一转到雷电模拟器里又什么都看不到。其实这套东西并不复杂核心就是搞明白HTTPS证书信任和代理转发两层关系。今天我就用Fiddler Classic配合雷电模拟器把从电脑抓包、设置全局抓包、到抓模拟器流量的完整流程捋一遍。这套组合我用了很久基本上是调试安卓应用、分析手机接口、排查网络问题的首选方案开发、测试、安全和网络学习者都能直接参考。1. HTTPS抓包原理与工具选型1.1 为什么HTTP能直接抓包HTTPS却抓不到HTTP协议是明文传输抓包工具在中间把请求“看”一遍就行了。HTTPS则不一样它先通过TLS握手建立加密通道之后传输的内容全部是密文。你要是直接抓只能看到TCP层的包但看不到里面请求了什么参数、返回了什么JSON因为密钥只有客户端和服务端知道。抓包工具能解开HTTPS靠的是“中间人代理”的思路。打个比方你寄了一个带锁的快递抓包工具就是中转站。它把你的锁拆了换上自己的一把锁再继续发给收件人。收件人以为快递全程只经过自己的手实际上中转站已经拆开看过里面是什么了。换到技术里就是抓包工具与客户端建立一条TLS连接再与服务器建立另一条TLS连接客户端验证的是抓包工具的证书服务器验证的也是抓包工具的证书中间的明文数据自然就全部暴露了。要做到这一步必须让客户端信任抓包工具自己的根证书。所以你在电脑或手机上安装抓包工具的证书不是可选项而是必选项。如果客户端不信任这个证书TLS握手会被直接拒绝表现出来就是“证书错误”“域名不匹配”“SSL错误”之类的提示。1.2 常见抓包工具横向对比很多人问我用什么抓包我的建议是工具不在多选顺手的就行。目前主流方案无非这几个Fiddler Classic、Charles、mitmproxy、Wireshark。它们的侧重点完全不同。工具平台适合场景特点Fiddler ClassicWindows电脑端、安卓模拟器、浏览器调试免费、脚本功能强、UI信息密度高CharlesWindows/macOS手机真机、macOS开发环境界面清爽、操作直观但收费mitmproxy跨平台自动化测试、命令行环境基于Python可编程需要熟悉命令行Wireshark跨平台底层协议分析、TLS密钥日志能看到网卡所有包但解密HTTPS需要额外提供密钥这次我用的是Fiddler Classic主要是因为它在Windows上最省心安装包小解密HTTPS只需要勾选一个选项而且对模拟器流量抓取非常友好。Wireshark虽然底层网络分析更强但要拿到TLS会话密钥才能解密HTTPS对抓HTTP/HTTPS接口来说属于“杀鸡用牛刀”。1.3 为什么选择Fiddler雷电模拟器这套组合雷电模拟器是Android模拟器底层就是一个虚拟机。在模拟器里跑App本质上和真机没什么区别所有网络请求会经过虚拟网卡走Wi-Fi。只要我把电脑上的Fiddler作为全局代理开启然后在模拟器里把网络代理指向电脑模拟器里所有符合代理配置的HTTP和HTTPS请求都会先经过Fiddler自然就能解密和分析。为什么不直接在模拟器里装App抓包因为很多抓包工具需要root权限、要装证书到系统分区在模拟器里折腾反而更容易出问题。把抓包这件事剥离出来放到电脑上好处很明显界面大、过滤方便、抓包工具卡死了也不影响模拟器里的App继续运行。而且Fiddler的脚本和断点改包功能比直接在模拟器里操作方便太多。2. 电脑端HTTPS抓包环境部署2.1 安装Fiddler并开启全局HTTPS解密去Fiddler官网下载Fiddler Classic选Free Download就行安装过程一路Next没有太多坑。装完之后打开第一件事不是急着抓包而是先把HTTPS解密和远程连接打开。进入Tools - Options - HTTPS勾选Capture HTTPS CONNECTs和Decrypt HTTPS traffic下拉框里建议选择... from all processes这样不管是浏览器、桌面应用还是模拟器发起的HTTPS流量都会尝试解密。接着切到Connections选项卡勾选Allow remote computers to connect代理端口默认是8888保持默认即可。这里要理解一下Fiddler的“全局抓包”机制。开启这些选项后Fiddler会在Windows系统代理里写入一条规则把电脑上走HTTP/HTTPS的流量转发到127.0.0.1:8888也就是Fiddler自己身上。所以只要工具开着浏览器、一些桌面应用都会自动走这个代理。这也是为什么抓包结束后建议及时关闭工具或者手动关掉系统代理否则电脑上网体验会受影响。有个细节要特别说一下在Tools - Options - Connections里有个“Bypass URLs for localhost”之类的选项不同版本位置略有差异。它的作用是让访问localhost或127.0.0.1的请求不经过代理。如果你要抓本机服务比如本地启动的接口记得不要勾选否则你会在会话列表里看不到任何本地请求。2.2 安装并信任Fiddler根证书这一步是解开HTTPS的关键。打开Tools - Options - HTTPS点击Actions - Trust Root Certificate。系统会弹窗询问是否安装证书一路选择“是”即可。需要注意安装位置必须选“受信任的根证书颁发机构”默认弹窗里一般会帮你选好如果没有就手动切换。除了信任到系统根证书后面给模拟器用的时候还需要把证书导出成文件。在同样的Actions菜单里选择Export Root Certificate to Desktop桌面就会多出一个FiddlerRoot.cer文件。保存好后面转换和推送都用得上。为什么必须在电脑上信任这个证书因为Fiddler在和浏览器建立HTTPS连接时会动态生成一个伪造的服务器证书这个证书是用Fiddler根证书签发的。浏览器出于安全机制只信任位于系统根证书存储区里的CA只有当Fiddler根证书被放到那里浏览器才会认为“这个由Fiddler签发的假证书是合法的”否则直接报安全异常。2.3 验证电脑端抓包是否成功证书装好之后打开Fiddler再打开浏览器访问一个HTTPS网站比如随便一个https开头的站点。正常情况下会话列表里会出现两类数据一类是CONNECT主机名:443这是初始TLS隧道另一类是真正的HTTPS请求双击进去在Inspectors里能看到完整的请求头、响应头、Cookie、JSON参数。如果你只看到CONNECT行点开后没有子请求说明客户端没有信任Fiddler的证书或者应用走了其它网络栈。浏览器里常见原因是系统代理被插件覆盖、装了某些广告拦截插件、或者浏览器自带的“安全DNS”干扰。我习惯用浏览器的无痕模式验证因为无痕模式插件加载少更容易排除干扰。验证的时候建议顺便把过滤器清一下。因为Fiddler会抓取所有进程的流量包括Windows服务、后台更新看起来会很乱。你可以先点击会话列表上方的X按钮清空内容再操作目标页面这样抓到的就是相对干净的请求。3. 雷电模拟器流量抓包实战3.1 模拟器代理设置让流量先走电脑电脑端准备就绪后接下来是雷电模拟器。先在模拟器里打开设置进入WLAN菜单。雷电模拟器一般默认会连上一个叫AndroidWifi的Wi-Fi网络长按这个网络选择“修改网络”把代理方式从“无”改成“手动”。主机名填写电脑在局域网里的IP地址端口填写8888。先别急着保存有几个前置条件必须满足电脑和模拟器要能互相通信。雷电模拟器默认走NAT网络理论上模拟器内部可以通过局域网IP访问宿主机但前提是电脑防火墙允许入站连接。Windows防火墙默认会拦截来自虚拟网卡的外部连接所以要先放行8888端口。查看电脑IP的方式是命令行输入ipconfig找到当前网卡的IPv4地址比如192.168.1.23。不要填127.0.0.1因为模拟器里的127.0.0.1指向的是模拟器自己不是你的电脑。保存代理设置后先在模拟器里打开浏览器访问一个http或https网站看看是否报网络错误。如果报错多半是防火墙或IP填写问题。防火墙放行的操作是控制面板 - Windows Defender防火墙 - 高级设置 - 入站规则 - 新建规则 - 端口 - TCP - 特定本地端口8888 - 允许连接。不同Windows版本可能略有差异但核心就是把8888端口对模拟器网段打开。如果实在不想折腾防火墙还有一个备选在电脑上打开ADB执行adb reverse tcp:8888 tcp:8888把模拟器的8888端口反向映射到电脑的8888端口。然后模拟器代理主机名填127.0.0.1端口填8888。这个方案走的是ADB通道不依赖局域网和防火墙对USB连接的真机也管用属于紧急救场手段。3.2 Android 7的证书信任坑用户证书不生效很多人卡在最后一步模拟器里已经装上了Fiddler证书抓包工具还是看不到明文甚至App直接报网络错误。这个问题几乎都出在Android 7.0之后的一个安全变更上。从Android 7开始系统默认不再信任用户安装的证书只有放在系统分区里的证书才被App信任。虽然你在模拟器设置里“安装证书”能成功但对于绝大多数Android 7应用来说这个证书形同虚设因为它们只信任系统CA证书。解决办法是把Fiddler证书变成系统证书。大致流程如下先将导出的FiddlerRoot.cer从DER格式转换成系统证书要求的文件名。证书文件名不是随便起的而是根据证书主题哈希值生成的。Windows上可以用openssl命令Linux或macOS同理。openssl x509 -inform DER -in FiddlerRoot.cer -subject_hash_old -noout执行后会输出一串十六进制字符比如87c0d856。然后把这个证书文件重命名为87c0d856.0。接下来用ADB把证书推送到模拟器的系统证书目录。雷电模拟器需要先开启Root权限在模拟器设置里打开“Root权限”开关然后重启模拟器。adb connect 127.0.0.1:5555 adb root adb remount adb push 87c0d856.0 /system/etc/security/cacerts/ adb shell chmod 644 /system/etc/security/cacerts/87c0d856.0执行完后重启模拟器或至少重启目标App再去Fiddler里看大多数HTTPS流量都能解开明文了。如果你觉得push到系统目录太折腾还有一个偷懒的办法多开一个Android 5.1的雷电模拟器专门用来抓包。低版本系统对证书信任更宽松很多App用低版本系统调试时不会校验那么严格。不过对于新版本App来说最低兼容版本往往也要求Android 7以上所以这个偷懒方案并不总能成功。3.3 真机与模拟器抓包的差异与取舍标题里还提到抓手机流量这里一并说清楚。真机和模拟器的抓包思路几乎一样都是让手机连上电脑所在Wi-Fi手动设置HTTP代理指向电脑IP:8888再安装根证书。区别在于苹果和部分安卓真机安装证书后还需要在系统设置里手动信任这个证书否则同样抓不到明文。模拟器相对更方便的一点是你可以自由创建不同Android版本的多开实例而且随时可以重置系统不怕把环境搞坏。真机则更贴近真实网络环境适合测试弱网、定位GPS、相机等硬件相关场景但证书安装步骤会多一些。我的建议是抓App接口、调试模拟器里的应用优先用雷电模拟器测真实网络、验权限弹窗、做弱网测试再过渡到真机。两者在抓包原理上没有本质区别前面这套电脑端Fiddler配置完全可以共用。4. 流量过滤与接口调试技巧4.1 快速定位目标请求代理设置完成之后Fiddler会哗啦啦抓到大量请求。如果你不加以过滤很容易在一堆图片、统计、上报请求里迷失方向。这时候有几个非常实用的过滤办法。最简单的是用QuickExec命令行也就是Fiddler底部的黑色输入框。输入?加关键字可以过滤出URL中包含该关键字的请求比如?api输入host:api.example.com可以只显示某个域名的请求输入/login能过滤出路径中包含login的请求。这种方式快而且不用点点点。如果要做更精细的过滤右上角Filters选项卡更好用。勾选Use Filters后可以按Host、Request Headers、Response Status Code等维度过滤。我常用的组合是只显示某个Host、且响应码为200-302的请求。这样基本能滤掉绝大多数噪声。还有一个习惯在点开App某个页面之前先在Fiddler里按CtrlX清空所有会话然后在模拟器里操作最后回到Fiddler看新产生的请求。这样抓到的就是这次操作的完整请求链路定位问题非常高效。4.2 断点修改请求和响应抓包不只是“看”更实用的是“改”。Fiddler支持在请求发送前和响应返回后打断点你可以在断点处修改数据再放行。这个功能在调试接口兼容性、模拟异常响应、绕过前端校验时特别有用。设置方式很简单菜单Rules - Automatic Breakpoints - Before Requests表示所有请求在发出去之前会被拦截After Responses则会在响应返回给客户端之前拦截。你也可以用快捷键F11切换请求前断点AltF11切换响应后断点。举个例子某个接口返回的列表默认只有10条数据我想验证前端能不能正确渲染500条。那就可以在After Responses模式下双击这个接口的响应报文把返回JSON里分页大小字段从10改成500再点击Run to Completion放行。App端就能看到对应的UI变化。改包只能用于你自己有权限测试的系统。如果是在未经授权的环境里篡改线上接口的返回那性质就变味了。千万别拿这个功能去薅羊毛、改支付结果、绕过会员验证我这里只聊正规调试场景。4.3 通过明文报文排查接口问题抓包最实在的价值就是把HTTPS解密成明文后详细分析一次请求链路。我习惯按这个顺序检查请求行URL、请求方法、HTTP版本。请求头User-Agent、Content-Type、Cookie、Authorization。请求体表单参数、JSON参数、二进制上传数据。响应状态码200、400、401、403、500等。响应体JSON、XML、HTML、图片流。有一次我遇到一个接口返回400错误抓包发现请求体里某个字段传了null但服务端要求传字符串这就是典型的参数类型不匹配。如果没有抓包光看错误码你只能瞎猜。抓包后你再对比正常请求和异常请求的报文差异问题基本一眼就能看出来。Fiddler的Inspectors面板提供了很友好的查看方式。顶部是请求相关数据底部是响应相关数据JSON数据会自动格式化比直接看原始报文舒服很多。如果你需要在多个请求之间比较可以选中两条会话用Ctrl鼠标多选再对比Headers或Body差异。5. 常见问题与避坑指南5.1 问题速查表下面这些是使用Fiddler雷电模拟器抓包时最常见的几个问题我按“现象-原因-处理”整理成了速查表方便你直接对照排查。现象可能原因处理方法模拟器设置代理后无法上网代理IP写错或防火墙未放行8888端口检查电脑IP确认防火墙入站规则Fiddler只能看到CONNECT隧道看不到请求客户端未信任Fiddler根证书重新安装并信任根证书模拟器转系统证书App提示SSL证书错误Android 7不信任用户证书按3.2节将证书推送进系统证书目录抓到的全是模拟器系统流量App没流量App可能走UDP/QUIC或自有协议确认App是否使用HTTP/HTTPS或是否禁用代理电脑浏览器能抓模拟器里抓不到模拟器代理未保存或代理字段被App忽略重新配置代理必要时用adb reverseFiddler抓不到localhost本地服务“Bypass localhost”选项被勾选在Connections选项中取消绕过localhost抓包后电脑网络异常Fiddler关闭时未还原系统代理退出Fiddler后检查系统代理设置5.2 我踩过的几个坑第一个大坑是防火墙。我最初配置模拟器代理时怎么填IP都不通模拟器浏览器一直提示网络异常。后来才发现Windows防火墙默认把入站端口全拦了给8888端口加一条放行规则就好了。这个问题极其隐蔽因为电脑本机访问Fiddler完全正常容易让人误以为是模拟器本身的问题。第二个坑是证书格式和文件名。生成系统证书时很多人直接把导出的cer文件push进去文件名还是FiddlerRoot.cer这当然不行。系统读取证书是按文件名哈希来索引的文件名不对就不认。记住先执行openssl命令算哈希再重命名成哈希.0。第三个坑是那些带SSL Pinning的应用。这类应用会在客户端内置服务器公钥或证书指纹不管你装什么根证书它都只认自己内置的那一套。抓不到是正常的不代表你哪里做错了。如果是自己团队的应用可以让开发加个调试开关关闭Pinning如果是第三方应用请先确认你是否有合法授权。第四个坑是模拟器网络模式。雷电模拟器默认NAT和桥接模式在某些版本下代理表现不太一样。如果配好代理后依旧不通试着去模拟器设置里切换一下网络模式或者重启模拟器让网络配置重新加载。不要在同一界面反反复复改很容易产生延迟。5.3 合规提醒最后想多说一句抓包能力强不强不重要重要的是用在什么地方。整个抓包流程只适用于你自己拥有的设备、你自己开发的应用或者你明确获得授权的系统测试。不要拿这套技术去截取别人的通信内容不要在公共环境下随意抓包更不要试图绕过支付验证、会员权限这类安全机制。网络安全的立足点是保护系统而不是破坏系统。把这套技能用在调试自己的接口、分析自己的App、学习网络原理上才是正确的打开方式。我个人实际用下来的体会是抓包这类问题90%都出在证书信任和代理连通性上。遇到抓不到包不要先怀疑工具不行按“系统代理是否生效 - 根证书是否被信任 - 目标App是否校验代理/TLS”这个顺序排查绝大部分问题十分钟内就能定位。这套Fiddler雷电模拟器的组合我一直在用稳定性够可自定义程度也高。等你熟练之后可以再接触mitmproxy脚本化抓包把请求自动保存、自动断言都跑起来那又是另一个层次的高效了。
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。