README-zh_Hans.md
汉字 | English
[!TIP] 支持Linux系统内核x86_64 4.18及以上版本,aarch64 5.5及以上版本; 需要ROOT权限或特定的 Linux capabilities; 不支持Windows、macOS系统;
eCapture的汉字名字为旁观者,即「当局者迷,旁观者清」,与其本身功能旁路、观察
契合,且发音与英文有相似之处。eCapture使用eBPF Uprobe/Traffic Control技术,实现各种用户空间/内核空间的数据捕获,无需改动原程序。
[!IMPORTANT] 支持 Linux/Android的x86_64/aarch64 CPU架构。
下载 release 的二进制包,可直接使用。
[!TIP] 仅支持Linux x86_64/aarch64。
# 拉取镜像
docker pull gojue/ecapture:latest
# 运行
docker run --rm --privileged=true --net=host -v ${宿主机文件路径}:${容器内路径} gojue/ecapture ARGS
⚠️ 安全提醒:
--privileged=true会授予容器完整的宿主机访问权限。在生产环境中,建议使用特定的 capabilities 替代。参阅 最小权限指南。
捕获基于Openssl动态链接库加密的网络通讯。
sudo ecapture tls
eCapture 会自动检测系统的 OpenSSL 库并开始捕获明文。当你发起 HTTPS 请求时(如 curl https://baidu.com),捕获到的请求和响应将会显示:
...
INF module started successfully. moduleName=EBPFProbeOPENSSL
??? UUID:233479_233479_curl_5_1_39.156.66.10:443, Name:HTTPRequest, Type:1, Length:73
GET / HTTP/1.1
Host: baidu.com
Accept: */*
User-Agent: curl/7.81.0
...
📄 完整的输出示例请参阅 docs/example-outputs.md。
eCapture 有8个模块,分别支持openssl/gnutls/nspr/boringssl/gotls等类库的TLS/SSL加密类库的明文捕获、Bash、Mysql、PostGres软件审计。
你可以通过ecapture -h来查看这些自命令列表。
执行sudo ecapture -h查看详细帮助文档。
eCapture默认查找/etc/ld.so.conf文件,查找SO文件的加载目录,并查找openssl等动态链接路位置。你也可以通过--libssl
参数指定动态链接库路径。
如果目标程序使用静态编译方式,则可以直接将--libssl参数设定为该程序的路径。
openssl模块支持3种捕获模式
支持了TLS加密的基于TCP的http 1.0/1.1/2.0应用层协议, 以及基于UDP的 http3 QUIC应用层协议。
你可以通过-m pcap或-m pcapng参数来指定,需要配合--pcapfile、-i参数使用。其中--pcapfile参数的默认值为ecapture_openssl.pcapng。
sudo ecapture tls -m pcap -i eth0 --pcapfile=ecapture.pcapng tcp port 443
📄 完整的 pcapng 模式输出请参阅 docs/example-outputs.md。
将捕获的明文数据包保存为pcapng文件,再使用Wireshark打开查看,之后就可以看到明文的网络包了。
你可以通过-m keylog或-m key参数来指定,需要配合--keylogfile参数使用,默认为ecapture_masterkey.log。
捕获的openssl TLS的密钥Master Secret信息,将保存到--keylogfile中。你也可以同时开启tcpdump抓包,再使用Wireshark打开,设置Master Secret路径,查看明文数据包。
sudo ecapture tls -m keylog -keylogfile=openssl_keylog.log
也可以直接使用tshark软件实时解密展示。
tshark -o tls.keylog_file:ecapture_masterkey.log -Y http -T fields -e http.file_data -f "port 443" -i eth0
sudo ecapture tls -m text 将会输出所有的明文数据包。(v0.7.0起,不再捕获SSLKEYLOG信息。)
与openssl模块类似。
cfc4n@vm-server:~$# uname -r
4.18.0-305.3.1.el8.x86_64
cfc4n@vm-server:~$# cat /boot/config-`uname -r` | grep CONFIG_DEBUG_INFO_BTF
CONFIG_DEBUG_INFO_BTF=y
sudo ecapture gotls --elfpath=/home/cfc4n/go_https_client --hex
确保该程序会触发https请求。
/home/cfc4n/go_https_client
sudo ecapture gotls -h
eCapture 还支持其他模块,如bash、mysql、nss、postgres等,你可以通过ecapture -h查看详细帮助文档。
eCaptureQ是 eCapture 的跨平台图形界面客户端,将 eBPF TLS 抓包能力可视化呈现。采用 Rust + Tauri + React 技术栈构建,提供实时响应式界面,无需 CA 证书即可轻松分析加密流量。让复杂的 eBPF 抓包技术变得简单易用。 支持两种模式:
https://github.com/user-attachments/assets/c8b7a84d-58eb-4fdb-9843-f775c97bdbfb
关于 eCapture/eCaptureQ 使用的 Protobuf 日志模式的详细信息,请参见:
参考 CONTRIBUTING的介绍,提交缺陷、补丁、建议等,非常感谢。
你可以定制自己想要的功能,比如设定uprobe
的偏移地址,用来支持被静态编译的Openssl类库。编译方法可以参考 编译指南 的介绍。
当eCapture运行后,你可以通过HTTP接口动态修改配置,参考HTTP API 文档。
eCapture支持多种事件转发方式,你可以将事件转发至Burp Suite等抓包软件,详情参考事件转发API 文档。
本项目获得 JetBrains IDE 许可证的支持。感谢 JetBrains 对开源社区的贡献。