eCapture 使用方法
eCapture 使用方法
eCapture 是一款基于 eBPF 的流量观测工具,核心用途是直接抓取 TLS/SSL 明文内容,而不需要像传统 MITM 那样安装 CA 证书。它适合做 Android App 抓包、Go 程序网络分析、以及一些主机侧审计场景。
我自己用下来,最重要的结论只有一个:先判断目标用的是什么 TLS 实现,再决定用哪个模块。选错模块,后面怎么折腾都抓不到。
1. eCapture 能做什么
官方仓库里支持的内容大致分几类:
tls:抓 OpenSSL / BoringSSL / LibreSSL / GnuTLS / NSS 的 TLS 明文gotls:抓 Gocrypto/tlsbash/zsh:主机命令审计mysql:数据库查询审计
它的优势是不用装 CA,不依赖浏览器证书链,适合一些“证书装了也没用”的场景。
2. 运行前提
官方说明里,eCapture 支持 Linux / Android,CPU 架构主要是 amd64 和 aarch64。Android 上通常需要 root,或者满足对应的系统能力要求。
几个常见前提:
- Linux 或 Android
- 内核版本满足要求
- 目标进程确实走的是标准 TLS 库
- 如果要抓 Go 程序,最好能拿到未过度裁剪的 ELF
3. 安装方式
最直接的方式是去官方 release 下载预编译包,解压后直接运行:
1 | |
如果是容器环境,也可以用官方镜像:
1 | |
4. 最常用的两个模块
4.1 tls 模块
如果目标 App 或服务使用的是 OpenSSL、BoringSSL 这类常见 TLS 库,优先试 tls。
1 | |
如果想看更偏文本的输出,可以用文本模式:
1 | |
这个模块适合:
- 浏览器
- curl / wget
- 大多数 C/C++ 网络程序
- 部分 Android App
4.2 gotls 模块
如果目标是 Go 写的程序,尤其是 crypto/tls,要用 gotls。
1 | |
这个模块最容易踩坑的地方是:
- 二进制被 strip 了
- Go 版本和 eCapture 解析逻辑不匹配
- 目标 ELF 的符号和函数范围不完整
如果遇到解析失败,先别急着怀疑 eCapture 本身,先检查目标文件:
1 | |
5. Android 场景怎么用
Android 上抓包,核心是先判断 App 的网络栈。
| 场景 | 适合模块 |
|---|---|
| Java / Kotlin App 走系统 TLS | tls |
| Go 编写的 App,例如一些代理、工具类程序 | gotls |
| 自定义加密 / 自研网络协议 | eCapture 不一定能直接看到明文 |
5.1 先确认进程是谁
先找包名和进程:
1 | |
如果是自己调试的设备,也可以直接看前台应用:
1 | |
5.2 抓 Go 程序的 TLS
如果目标是 Go 程序,常见思路是把 libclash.so、主程序或相关 ELF 拿出来,再用 gotls 跑。
1 | |
我自己的经验是,Go 程序比普通 TLS 程序更容易失败,原因通常不是网络没走通,而是:
- 目标二进制被裁剪
- 编译优化把函数边界打散了
- eCapture 需要的 Go 运行时信息不完整
6. 一个实用的排查顺序
如果你只是想快速判断能不能抓到,建议按这个顺序:
- 先确认目标是不是标准 TLS
- 再决定用
tls还是gotls - 先用最简单的命令跑起来
- 再加过滤条件、输出格式和路径参数
- 最后再考虑代理链、重放和二次分析
这样比一开始就把 Clash、代理、证书、重放全叠上去更稳。
7. 常见问题
7.1 为什么 tls 抓不到 Go 程序
因为 tls 针对的是 OpenSSL / BoringSSL 这类库,不是 Go 标准库。
7.2 为什么 gotls 报错
最常见的是目标 ELF 不完整、符号被 strip、或者 Go 版本兼容性不好。这个时候先换一个更干净的二进制,或者确认 .gopclntab 是否存在。
7.3 为什么 Android 上看起来没有任何输出
常见原因有三个:
- 权限不够
- 内核不支持当前 hook
- 目标 App 根本没走你以为的那条 TLS 路径
8. 我的使用建议
如果你要在 Android 上做 App 抓包,我建议先按这个优先级试:
- 标准 App 先试
tls - Go 程序再试
gotls - 目标复杂时再结合代理、日志和重放工具
eCapture 不是“万能解密器”,它更像是一个很强的观测点。抓到明文的前提,始终是目标真的走了它能 hook 到的那一层。
9. 可以直接复制的命令
如果你只想先跑通流程,可以直接从这几条开始。
9.1 Linux 上先看帮助
1 | |
9.2 抓一个标准 TLS 程序
1 | |
然后在另一个终端发一个 HTTPS 请求:
1 | |
9.3 抓 Go TLS 程序
先找到目标 ELF,再把路径传给 gotls:
1 | |
9.4 Android 设备上的最小流程
先确认前台应用或进程名:
1 | |
如果设备已 root,可以直接在手机端跑:
1 | |
如果是 Go 程序,先把 ELF 放到手机可读路径,再跑:
1 | |