乐于分享
好东西不私藏

Flutter App iOS和Android抓包方案

Flutter App iOS和Android抓包方案

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

一、抓包思路概览

  1. HTTP/HTTPS 请求

    • Flutter 里通常用 httpdiochopper 等库。
    • 抓包原理:通过代理(Proxy)或系统证书替换来截获网络请求。
  2. 两类抓包目标

    • 明文 HTTP 请求:直接抓包即可。
    • HTTPS 请求:需要安装抓包工具的根证书或者进行中间人攻击(MITM),注意 Android 7+ 和 iOS 9+ 有网络安全限制。
  3. Flutter 特有注意点

    • Flutter WebView 或自定义平台通道可能绕过 Dart 的 HTTP 客户端,需要抓包时关注 Native 层。
    • Dio 等库可能启用证书 pinning,需要额外处理。

二、抓包工具

1. 常用抓包代理

工具
平台
特点
Charles
macOS/Windows/Linux
GUI 界面友好,支持 HTTPS 代理,证书安装方便,Flutter 常用
Fiddler
Windows/macOS
免费,HTTPS 支持,支持请求重写和脚本处理
Proxyman
macOS
Mac 用户佳选,现代 UI,支持 iOS/Android 抓 HTTPS
mitmproxy
跨平台
CLI 工具,强大脚本扩展,适合自动化测试
Wireshark
跨平台
抓包底层流量,适合调试网络异常或非 HTTP 协议

2. 配置抓包流程

  1. 设置代理

    • PC 或 Mac 上运行抓包工具,获取代理 IP 和端口(如 127.0.0.1:8888)。
    • Android/iOS 设备或模拟器设置 HTTP 代理。
  2. 安装证书(HTTPS)

    • Charles/Fiddler/Proxyman 会生成根证书。
    • Android 7+:证书需要安装在 用户证书/信任管理 中,并可能需要在 App 里允许用户证书。
    • iOS 9+:安装证书后,需要在 设置 → 通用 → 关于本机 → 证书信任设置 中启用信任。
  3. Dart/Flutter 特殊处理

    • 修改 App 代码禁用 pinning(调试版)
    • 或使用 Frida/MonkeyDev 动态 hook 绕过 pinning
    • Dart 的 HttpClient 默认使用系统证书,可抓 HTTPS。

    • 如果 App 使用了

      证书 pinning

      (比如 Dio interceptor 检查证书),则需要:

三、Flutter 端抓包优化方法

  1. 直接在 Dart 层打印请求
    • Dio: 使用 LogInterceptor
    • http: 包装 Client 输出请求/响应 优点:无需抓包工具,缺点:只能在调试模式有效。
  2. 在模拟器抓包
    • Android Emulator 或 iOS Simulator 都可以配置代理,方便抓包。
  3. 真机抓包注意事项
    • 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)