Files
MemRelay/projects/280dd2a0-d23d-4a71-91e1-dce4353163be/Frida 拦截 Flutter 流量的进展与卡点.md
T
memrelay cede49eee2 create: Frida 拦截 Flutter 流量的进展与卡点
MemRelay-Operation: memory-save:rapdrama-exp-frida-progress-20260925-0420
MemRelay-Resource: 3857b23e-1823-4ee9-a368-ec9161d4fd72
2026-09-25 04:34:21 +08:00

2.3 KiB
Raw Blame History

title, type, permalink, stable_id, scope, memory_type, project_id, usage_profile_id, status, revision, request_id, created_at, updated_at, tags
title type permalink stable_id scope memory_type project_id usage_profile_id status revision request_id created_at updated_at tags
Frida 拦截 Flutter 流量的进展与卡点 experience main/projects/280dd2a0-d23d-4a71-91e1-dce4353163be/frida-拦截-flutter-流量的进展与卡点 3857b23e-1823-4ee9-a368-ec9161d4fd72 project experience 280dd2a0-d23d-4a71-91e1-dce4353163be 0c9feb46-d06e-43cd-9ef0-c5813c84a998 active 1 rapdrama-exp-frida-progress-20260925-0420 2026-09-24T20:34:18.651753+00:00 2026-09-24T20:34:18.651753+00:00
frida
flutter
抓包
dart

当前进展

已安装 Frida 17.18 + frida-server 17.17.0(x86_64)。SSL verify hook(偏移 0x8113ee)能成功安装并触发。视频流(ExoPlayer / Java 层)通过系统代理进 Charles 并被解密。

卡点

Dart 的 HttpClient 不走 Android 系统代理(findProxy 默认是 null = 直连)。API 请求直连 apis.raptdrama.com / app.raptdrama.com,不经过 Charles。

用 iptables DNAT 把 TCP 443 转到 Charles 时,Charles 的透明代理无法正确建立到原始目标的回连(因为 DNAT 丢失了原始目标地址信息,Charles 收到的连接目标是自己),导致连接失败或 TLS 从未发起。SSL bypass hook 不会被触发因为根本没到 TLS 握手阶段。

Frida hook libc connect 时发现:App 启动后 30 秒内没有一次 libc connect() 被调用。netstat 确认 Dart 进程有到 10.0.2.2:8888 的 tcp6 连接(使用 AF_INET6 + IPv4-mapped 地址),说明系统代理确实被 Dart 读到了(只是 API 请求没走它)。需要进一步确认 Dart 到底怎么建立到 apis.raptdrama.com 的直连。

未尝试的方案

  1. reFlutter 重打包:patch libflutter.so 内置代理地址和禁用 SSL 验证,重签后安装。缺点是签名变化可能影响谷歌登录,且每次 App 更新要重做。
  2. mitmproxy 透明代理:mitmproxy 的透明模式可以从 DNAT 的 SO_ORIGINAL_DST 获取原始目标地址,Charles 不行。
  3. Frida 直接 hook Dart 的 HTTP 层:在 libapp.so 里找到 dio/http_client 的请求/响应处理函数,直接拦截 JSON 而不走代理解密。
  4. ProxyDroid / tun2socks:在模拟器里装 VPN app 把所有流量导到代理,比 iptables DNAT 更完整。
  5. HTTP Toolkit:专门处理 Android 透明代理,内置 DNAT 支持。