Flutter 本身是用 Dart 编写,最终通过 native 网络库调用 HTTP/HTTPS,因此抓包方法和普通移动应用大体类似,但有一些 Flutter 特有的注意点。

一、抓包思路概览
HTTP/HTTPS 请求
Flutter 里通常用 http、dio、chopper等库。抓包原理:通过代理(Proxy)或系统证书替换来截获网络请求。 两类抓包目标
明文 HTTP 请求:直接抓包即可。 HTTPS 请求:需要安装抓包工具的根证书或者进行中间人攻击(MITM),注意 Android 7+ 和 iOS 9+ 有网络安全限制。 Flutter 特有注意点
Flutter WebView 或自定义平台通道可能绕过 Dart 的 HTTP 客户端,需要抓包时关注 Native 层。 Dio 等库可能启用证书 pinning,需要额外处理。
二、抓包工具
1. 常用抓包代理
| Charles | ||
| Fiddler | ||
| Proxyman | ||
| mitmproxy | ||
| Wireshark |
2. 配置抓包流程
设置代理
PC 或 Mac 上运行抓包工具,获取代理 IP 和端口(如 127.0.0.1:8888)。 Android/iOS 设备或模拟器设置 HTTP 代理。 安装证书(HTTPS)
Charles/Fiddler/Proxyman 会生成根证书。 Android 7+:证书需要安装在 用户证书/信任管理 中,并可能需要在 App 里允许用户证书。 iOS 9+:安装证书后,需要在 设置 → 通用 → 关于本机 → 证书信任设置中启用信任。Dart/Flutter 特殊处理
修改 App 代码禁用 pinning(调试版) 或使用 Frida/MonkeyDev 动态 hook 绕过 pinning Dart 的 HttpClient 默认使用系统证书,可抓 HTTPS。
如果 App 使用了
证书 pinning
(比如 Dio interceptor 检查证书),则需要:
三、Flutter 端抓包优化方法
直接在 Dart 层打印请求 Dio: 使用 LogInterceptorhttp: 包装 Client输出请求/响应 优点:无需抓包工具,缺点:只能在调试模式有效。在模拟器抓包 Android Emulator 或 iOS Simulator 都可以配置代理,方便抓包。 真机抓包注意事项 Android 真机必须开启 Wi-Fi 代理并安装证书 iOS 真机需要配置证书和代理 Flutter release 版可能有混淆和 pinning,需要额外处理
四、进阶抓包:绕过证书 Pinning
利用Frida搭配禁用证书 Pinning脚本然后实现抓包。
采用的脚本仓库为:disable-flutter-tls-verification
frida -U -n "Flutter APP" -l fridajs/disable-flutter-tls.js然后Android可以通过类似Reqable实现抓包数据。
iOS有点特殊,禁用证书之后数据并没有转到系统代理上,可采用proxypin移动端搭配proxypin桌面端把数据转到桌面端进行抓包即可。
五、抓包注意事项
法律与隐私:只能抓自己开发或有授权的 App 流量,避免触碰隐私法规。 环境区分:调试环境 vs 生产环境,生产 App 往往更严格(Pinning + 混淆)。 Flutter hot reload:抓包调试 Dart 层打印信息比抓网络请求更快。
六、 总结
简单抓包:Charles/Fiddler + 证书 Flutter 内部调试:直接用 Dio/HttpClient 日志 高级抓包:绕过证书 pinning(Frida/MonkeyDev)
夜雨聆风