From cede49eee2990c06eee8efbd38a1197d16799a2d Mon Sep 17 00:00:00 2001 From: MemRelay Date: Fri, 25 Sep 2026 04:34:21 +0800 Subject: [PATCH] =?UTF-8?q?create:=20Frida=20=E6=8B=A6=E6=88=AA=20Flutter?= =?UTF-8?q?=20=E6=B5=81=E9=87=8F=E7=9A=84=E8=BF=9B=E5=B1=95=E4=B8=8E?= =?UTF-8?q?=E5=8D=A1=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit MemRelay-Operation: memory-save:rapdrama-exp-frida-progress-20260925-0420 MemRelay-Resource: 3857b23e-1823-4ee9-a368-ec9161d4fd72 --- .../Frida 拦截 Flutter 流量的进展与卡点.md | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 projects/280dd2a0-d23d-4a71-91e1-dce4353163be/Frida 拦截 Flutter 流量的进展与卡点.md diff --git a/projects/280dd2a0-d23d-4a71-91e1-dce4353163be/Frida 拦截 Flutter 流量的进展与卡点.md b/projects/280dd2a0-d23d-4a71-91e1-dce4353163be/Frida 拦截 Flutter 流量的进展与卡点.md new file mode 100644 index 0000000..8ecf841 --- /dev/null +++ b/projects/280dd2a0-d23d-4a71-91e1-dce4353163be/Frida 拦截 Flutter 流量的进展与卡点.md @@ -0,0 +1,40 @@ +--- +title: Frida 拦截 Flutter 流量的进展与卡点 +type: experience +permalink: main/projects/280dd2a0-d23d-4a71-91e1-dce4353163be/frida-拦截-flutter-流量的进展与卡点 +stable_id: 3857b23e-1823-4ee9-a368-ec9161d4fd72 +scope: project +memory_type: experience +project_id: 280dd2a0-d23d-4a71-91e1-dce4353163be +usage_profile_id: 0c9feb46-d06e-43cd-9ef0-c5813c84a998 +status: active +revision: 1 +request_id: rapdrama-exp-frida-progress-20260925-0420 +created_at: '2026-09-24T20:34:18.651753+00:00' +updated_at: '2026-09-24T20:34:18.651753+00:00' +tags: +- 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 支持。 \ No newline at end of file