eCapture是一个无需CA证书,即可捕获HTTPS/TLS明文的抓包工具,常用语网络分析、故障定位等。最初定位是Linux上的抓包工具,在2022年9月支持了Android系统,在Android 12起,只要是Linux内核是5.5以上的ARM架构,都可以正常运行。支持TLS 1.2、TLS1.3版本的协议,只需要root,无需应用重启、更改等,很受大家欢迎。
今天,eCapture v0.6.5 版本发布,支持了两个功能:支持所有端口的网络包、支持Android 13和Android 14。
新版本
近两年,Android也陆续发布了13、14版本,eCapture做了一些 兼容更新,支持了Android 13、Android 14版本的BoringSSL类库的明文捕获。
除此之外,去掉了捕获端口的限制,如果--port
参数为0时,可以捕获所有端口的网络数据,并保存到pcapng
中。否则则只捕获--port
对应的端口数据,默认是443
端口。
下载使用
eCapture v0.6.5 下载地址见GitHub仓库:https://github.com/gojue/ecapture/releases/tag/v0.6.5
使用方法,可参见以往教程eCapture旁观者:Android HTTPS明文抓包
功能回顾
BoringSSL介绍
自支持Android至今,已经有一年多,其程序使用的默认SSL动态链接库是BoringSSL,fork自OpenSSL。这个类库广泛使用在Google的的各种产品里,包括Chrome、Android等。但他们不是同一个版本,完全是独立维护的两个Git仓库。情况如下:
- Android上的BoringSSL: BoringSSL Android仓库
- 非Android的BoringSSL:BoringSSL Github仓库
更让人无法理解的是,即使在Android不同发行版里,不管BoringSSL代码如何更新,都不更类库的新版本信息,都是OpenSSL 1.1.1 (compatible; BoringSSL)
, OPENSSL_VERSION_NUMBER
是269488255
。对使用者来说没影响,可对 eCapture来说就很头疼。SSL结构体的元素offset发生变化,很难根据版本号选择不同的offset值了。相对来说,OpenSSL就做得很好,只需要从动态链接库的ELF文件中读取openssl的版本号,再选择对应offset配置即可。
在Android 14里,BoringSSL的很多结构体改动较大,必需要用单独的eBPF 字节码文件,笔者花了整个周六的时间,想出一个机智地、取巧地思路,给兼容了。
捕获端口限制
早期,eCapture的pcapng模式是限制了网络捕获包的端口,--port
参数只能是80
、443
。技术上都已经实现,没有难点。默认没有捕获所有网络包,是因为有很多场景,主机的网络流量很大,eBPF的map写入太快,用户空间消费过慢,导致丢包的问题。
虽然用户空间在创建eBPF map时,已经申请了BufferSizeOfEbpfMap
大的内存,但仍然还存在网络包过多导致数据丢失的可能。 而且,在Android上有内存大小限制,BufferSizeOfEbpfMap
的值仅为1024
,即PageSize*1024,一般情况下是4M。
rd, err := perf.NewReader(em, os.Getpagesize()*BufferSizeOfEbpfMap)
也就是说,如果你启用所有端口的网络捕获,则可能会发生网络包未成功捕获的情况。 除此之外,你可以用eCapture来替换tcpdump使用,而且还多了HTTPS的明文捕获呢。
相关文章
如果你刚刚知道eCapture,对他的功能还不了解,你可以阅读本公众号的更多文章来了解。
eCapture旁观者支持Golang tls/https加密明文捕获
eCapture支持borgingssl TLS 1.3明文捕获
招聘信息
美团信息安全部长期招人,网络安全领域的研发方向,研发产品包括不限于HIDS/HIPS、RASP、EDR、WAF、零信任产品、NIDS等等,方向包括客户端软件、服务端后台,技术语言包括不限于C/C++、Golang、Java、Object-C、Swift等。 欢迎公众包内发私信联系,其他方向的岗位笔者也可协助内推到对应岗位部门。
CFC4N的博客 由 CFC4N 创作,采用 知识共享 署名-非商业性使用-相同方式共享(3.0未本地化版本)许可协议进行许可。基于https://www.cnxct.com上的作品创作。转载请注明转自:GitHub 7K星:eCapture新版支持Android 13、14