两个开源小工具:FlowTrans + android-capture-skill,把安卓抓包做成一条命令

本文最后更新于:2026年7月29日 下午

承接上一篇《Android 抓包实战全流程:FlowTrans + mitmweb + pproxy + Frida,从解密到重放》——那篇讲”为什么”和”怎么跑通”,这篇把里面的工具沉淀成了两个可以直接用的开源仓库,并把整条链路收敛成一两条命令。

在受限网络里抓一个”只对海外开放、做了证书固定、还忽略系统代理”的安卓 App,光”装 CA + 开代理”是不够的。我把踩过的坑固化成了两个东西:

  • FlowTrans —— 设备端的转发器(mihomo TUN)。
  • android-capture-skill —— PC 端的一键编排(Claude Code skill),把 FlowTrans + mitmweb + Frida 串起来。

两者可以分开用,也可以合起来”一条命令抓包”。

为什么需要 FlowTrans:App 根本不认系统代理

大多数现代 App(OkHttp / Cronet)不读系统 HTTP 代理,所以 settings put global http_proxy 对它们无效。正确做法是用 VpnService/TUN 在三层透明劫持,把流量强制导向 PC 上的 mitmproxy。FlowTrans 就是干这个的:

1
App ─▶ FlowTrans TUN(透明) ─▶ 设备 127.0.0.1:8080 ─▶ adb reverse ─▶ PC mitmweb ─▶ 互联网

它基于 mihomo 内核(预编译内置,不用装 Go/NDK),支持全局按应用路由,走 adb reverse 隧道就能绕开公司网络的 AP 隔离/防火墙。

FlowTrans 用法(GUI)

  1. PC 上跑 mitmproxy:mitmweb --listen-host 0.0.0.0 -p 8080
  2. FlowTrans 里新建 profile,上游填 127.0.0.1:8080(HTTP),Wi-Fi 连不上 PC 时配合 adb reverse tcp:8080 tcp:8080
  3. 全局按应用,点开始转发(同意 VPN 授权)
  4. mitmweb 里看流量

FlowTrans 用法(纯 adb,可脚本化)

不想点屏幕?GUI 那套有等价的命令行版(改路由 prefs 需要 root):

1
2
3
adb shell am force-stop com.flowtrans                 # 先停,prefs 是内存缓存、退出会回写
adb reverse tcp:8080 tcp:8080 # 隧道
adb shell su -c "am start-foreground-service -n com.flowtrans/.vpn.FlowVpnService -a com.flowtrans.action.START" # 起 VPN(必须 root)

写抓包名单、SELinux 上下文保留等完整细节,见仓库 README 的 Command-line control (adb)

让 App 信任 mitmproxy 的证书(root)

Android 7+ 默认不信任用户 CA,Android 14 系统证书库还搬进了不可写的 Conscrypt APEX。抓别家 App 得把 mitmproxy 的 CA 装进系统库——root 设备用 MoveCertificate 模块最省事,重启生效。

android-capture-skill:把整条链路收敛成一条命令

有了 FlowTrans 解决”传输”,还剩下:起 mitmweb、建隧道、设抓包目标、处理证书固定(Frida 脱壳)、换海外出口……手动一层层敲很累。android-capture-skill 把这些封装进一个 Python 入口 capture.py(它其实是个 Claude Code skill,但纯命令行也能直接跑),全程 adb、不碰屏幕。

一键抓包

1
2
3
4
5
# 1) 环境预检:PC(python/mitmproxy/...)+ 手机(root/FlowTrans/frida-server/证书一致性)
python scripts/capture.py preflight

# 2) 一条命令:设目标 + adb reverse + 起 mitmweb(直连) + 起 FlowTrans TUN VPN
python scripts/capture.py flowtrans --pkg com.example.app --mitmweb

mitmweb UI 在 http://127.0.0.1:8081,登录密码 flowtrans。想抓所有 App 用 --all;换目标再跑一次 flowtrans --pkg <新包> --mitmweb 即可;停止 flowtrans --stop

亮点

  • preflight 先兜底:证书不一致(mitmweb 的 CA ≠ 设备信任的 CA)会直接报出来,省得你开着转发抓半天全是 TLS 失败还找不到原因。
  • 海外出口:抓只对某地区开放的 App(如美区应用),加 --us-proxy scheme://host:port#user:pass(或环境变量 CAPTURE_US_PROXY),自动经 pproxy 链一个海外代理出网。凭据只走参数/环境变量,不写进脚本。
  • 证书固定兜底:第三方 SDK 正常、只有主域名握手失败 = pinning,用内置的 Frida 脚本脱壳(objection 快速验证 / unpin.compiled.js 常驻 / --native 应对 BoringSSL)。
  • 抓完能重放:仓库里还写了”脱离 App 用 curl 重放接口”的方法论——核心一句话:JWT 的 iss ≠ 它的获取入口,靠 mitmweb 的 HTTP API 脚本化定位 token 下发点。

在 mitmweb 里筛请求

顶部搜索框用 mitmproxy 过滤语法:~d 域名~u URL~m POST~c 200~bs 响应体正则~t json,用 & | ! 组合。离线筛存档:

1
mitmdump -nr scripts/captures/<x>.flows "~d api.example.com & ~m POST" --flow-detail 2

两者怎么配合

简单说:FlowTrans 负责”把流量弄过来”,skill 负责”把剩下的都办了”。

关注点 谁来做
App 忽略代理 → 透明劫持 FlowTrans TUN
起 mitmweb / 隧道 / 设目标 / 起停 VPN skill 的 capture.py flowtrans
证书固定 skill 调 Frida 脱壳
海外出口 skill 的 --us-proxy(pproxy 链)
环境自检 skill 的 preflight

仓库

两个仓库都带了完整 README 和排障文档。欢迎 star / issue。

⚠️ 仅用于授权范围内的安全测试、调试自己的 App、学习研究。请遵守你所检测 App 适用的服务条款与法律。


两个开源小工具:FlowTrans + android-capture-skill,把安卓抓包做成一条命令
https://kingjem.github.io/2026/07/29/FlowTrans与android-capture-skill一键安卓抓包/
作者
Ruhai
发布于
2026年7月29日
许可协议