KingJem/android-capture-skill
GitHub: KingJem/android-capture-skill
一个基于 Claude Code skill 的 Android 自动化 HTTPS 抓包工具,通过 FlowTrans TUN 透明劫持、mitmweb 解密和 Frida 绕过 SSL pinning 实现一键全流程抓包。
Stars: 0 | Forks: 0
# flowtrans-capture
一个用于在已 root 的 Android 设备上自动化抓取 HTTPS 数据包的 [Claude Code](https://claude.com/claude-code) **skill**:通过 **FlowTrans** (mihomo TUN) 进行透明传输,通过 **mitmweb** 进行解密,并通过 **Frida** 解除 SSL pinning。所有操作均通过单一的 Python 入口点 `scripts/capture.py` 借助 `adb` 驱动——无需屏幕点击。
面向已 root 的 Android 设备的一键抓包 skill:FlowTrans TUN 透明劫持 → mitmweb 解密 → (证书固定时)Frida 脱壳,全程 `python scripts/capture.py` + adb。
## 为什么需要
大多数应用(OkHttp/Cronet)会忽略系统 HTTP 代理,因此仅仅“安装 CA 证书 + 设置代理”是不够的。FlowTrans 在 L3 (TUN) 层将流量转发到 `127.0.0.1:8080` → `adb reverse` → PC 端的 mitmweb。
```
App ─▶ FlowTrans TUN ─▶ device 127.0.0.1:8080 ─▶ adb reverse ─▶ PC mitmweb ─▶ internet
```
## 快速开始
```
python scripts/capture.py preflight # check PC + phone env
python scripts/capture.py flowtrans --pkg com.example.app --mitmweb # target + reverse + mitmweb + VPN
```
mitmweb UI:`http://127.0.0.1:8081`(密码 `flowtrans`)。完整的工作流程、故障排除、Frida 解除证书固定以及 API 重放方法位于 [`SKILL.md`](SKILL.md) 和 [`references/`](references/) 中。
## 密码 / 密码
该工具设置的唯一密码是 **mitmweb Web UI** 的登录密码:**`flowtrans`**(通过 `--set web_password=flowtrans` 设置)。打开 `http://127.0.0.1:8081` 并输入 `flowtrans`(或使用 `http://127.0.0.1:8081/?token=flowtrans`)。如果你重新构建命令,可以使用 `mitmweb --set web_password=<你的密码>` 修改它。上游代理的凭证属于**你本人**——请通过 `--us-proxy` / `CAPTURE_US_PROXY` 提供,切勿硬编码。
工具只设一个密码:mitmweb Web UI 登录密码 = **`flowtrans`**。开 `http://127.0.0.1:8081` 输入即可。上游代理的账密是你自己的,用参数/环境变量传,别写进脚本。
## 上游出口:直连 vs 海外代理 / 上游出口
mitmweb 会发起真实的对外请求。共有两种出口模式:
- **直连(默认)**——通过本台 PC 的网络出站。适用于本地/区域性应用。
- **海外代理**——适用于只能在特定地区运行的应用:将 mitmweb 链式连接到 **pproxy** → 你的海外 HTTP 代理。
`flowtrans --mitmweb` 默认为直连;添加 `--us-proxy` 即可启用海外出口——仅需一条命令:
```
# 通过环境变量提供 credentials(切勿硬编码);语法为 #user:pass,而非 user:pass@host
set CAPTURE_US_PROXY=http://1.2.3.4:50100#user:pass
python scripts/capture.py flowtrans --pkg com.main.gopuff --mitmweb --us-proxy %CAPTURE_US_PROXY%
```
它会启动 `pproxy -l http://:8888 -r <你的海外代理>` 并在上游代理模式下运行 mitmweb → `mitmweb → pproxy:8888 → 海外 → 互联网`。
- **凭证语法**:`scheme://host:port#user:pass`(以 `#user:pass` 结尾,这是 pproxy 的特殊设定——而不是 `@`)。
- **验证出口国家/地区**:`curl -x http://127.0.0.1:8888 "http://ip-api.com/json/?fields=query,country,city"`。
- **上游不可达 → mitmweb 返回 502/503**:请先通过 pproxy 测试 `curl -x`。
## 在 mitmweb 中查看与筛选请求 / 查看与筛选请求
打开 `http://127.0.0.1:8081`(密码 `flowtrans`)。在顶部的搜索框中输入**筛选表达式**以缩小流量列表的范围(mitmproxy 筛选语法):
| 筛选器 | 匹配内容 |
|---|---|
| `~d sainsburys.co.uk` | 按**域名**/主机(正则表达式) |
| `~u /graphql` | 按 **URL**(正则表达式) |
| `~m POST` | 按 **method** |
| `~c 200` / `~c 4..` | 按响应**状态码** |
| `~bq token` / `~bs eyJ` | 请求 / 响应**主体**(正则表达式) |
| `~t json` | 按 content-**type** |
| `~d api.foo & ~m POST` | 使用 `&` `|` `!` 组合 |
离线状态下,可以使用 **mitmdump** 筛选保存的 `.flows` 文件:
```
# 仅打印 Sainsbury 的 POST 请求,包含 headers+body
mitmdump -nr scripts/captures/com.sainsburys.gol.flows "~d sainsburys & ~m POST" --flow-detail 2
# 提取过滤后的子集到新文件
mitmdump -nr scripts/captures/com.sainsburys.gol.flows -w subset.flows "~d api.sainsburys.co.uk"
```
若要编写脚本处理所有流量(例如定位 token 的颁发位置),请使用 mitmweb 的 HTTP API——详见 [`references/replay.md`](references/replay.md)。
## 停止与清理 / 停止与清理
**停止抓包链 / 停止抓包**
```
# TUN 路径 — 停止 FlowTrans VPN (tun0)、mitmweb 和 pproxy
python scripts/capture.py flowtrans --stop
# frida/start 路径(同时清除设备全局代理)
python scripts/capture.py stop
# 可选:移除 adb reverse 隧道以及(如果正在运行)设备上的 frida-server
adb reverse --remove-all
adb shell su -c "pkill frida-server"
```
**清理已抓取的数据 / 清理抓下来的包**
抓取的数据和日志会保存在脚本所在的目录下,并被 git 忽略(不会被提交),但它们可能包含**敏感的解密流量**(token、个人数据)——完成后请将其删除:
```
# flow 归档 + 日志(bash / git-bash)
rm -f scripts/captures/*.flows scripts/*.log scripts/*.err.log
```
```
# PowerShell
Remove-Item scripts\captures\*.flows, scripts\*.log, scripts\*.err.log -Force -ErrorAction SilentlyContinue
```
- Flow 归档文件:`scripts/captures/.flows`(路径由 `--save` 设置)。
- 日志:`scripts/mitmweb.log` · `mitmweb.err.log` · `pproxy.log` · `unpin.log`。
- 正常运行不会在设备上留下任何敏感信息;其使用的临时文件(`/sdcard/_ft.xml`、`/sdcard/_devca`)会被自动删除。
## 环境要求
- 已 root 的 Android 设备(KernelSU/Magisk),已安装 [FlowTrans](https://github.com/KingJem/FlowTrans) 转发器,并配置好 `adb`。
- PC 端:安装了 `mitmproxy` + `click` + `cryptography` 的 Python 环境;`adb` 需添加到 PATH 中。
- 针对启用了证书固定的应用:设备上需有匹配的 `frida-server`(未内置)。
- 设备需信任 mitmproxy CA 证书(例如在 Android 14 上使用 [MoveCertificate](https://github.com/ys1231/MoveCertificate))。
路径和凭证将从脚本自身的目录及环境变量中读取——没有任何硬编码。请参阅 `SKILL.md` 中的“首次配置”部分。
## ⚠️ 适用范围
仅供**已授权的**安全测试、调试自有应用和学习使用。请遵守适用于你所检查的任何应用的服务条款和法律法规。
背景说明文章:https://kingjem.github.io/2026/07/20/Android抓包实战全流程-FlowTrans-mitmweb-Frida-重放/
标签:Android, Docker支持, DSL, Frida, HTTPS抓包, Python, 中间人代理, 无后门, 自定义脚本, 逆向工具