一、前言
安卓客户端,时常遇到需抓包定位的问题,而想要在系统内抓包,目前已知比较流行的,无非以下几种情形:
- 手机root后,安装某些抓包软件;
- 市面上已知的代理软件,比如burpsuite、wireshark、Charles,需电脑开放端口代理给手机访问,并且burpsuite、Charles只能抓HTTP/HTTPS应用层;
- 无需root,但只能抓HTTP/HTTPS应用层的交互,不能抓TCP/UDP原始数据包,比如HttpCanary。
以上几种情形,都或多或少存在弊端,那么有什么方法能全面覆盖抓包场景,既无需root、无需代理、又可以随时随地在手机上抓原生包,甚至导出报文在电脑上分析呢?答案就是今天要讲的PCAPdroid。
PCAPdroid是一款隐私友好的应用,允许你追踪并分析你设备中应用所有的链接,此外,允许你导出为PCAP格式进行转储,并且允许你进行TLS解密,提取元数据等其他更多功能。
二、安装
以下方式任选其一即可:
方式 | 链接 |
---|---|
github | https://github.com/emanuele-f/PCAPdroid/releases |
Google Play商店 | https://play.google.com/store/apps/details?id=com.emanuelef.remote_capture&hl=en_US |
F-Droid | https://f-droid.org/packages/com.emanuelef.remote_capture/ |
网盘 | https://data.linux-code.com/?dir=filelist/Software/PCAPdroid |
把上面的主程序安装好即可,下面的安装为可选功能,只是统一在此提供安装链接,下文会具体介绍如何安装和使用。
如需在手机内部看到HTTPS/TLS解密后的报文,还需附加组件PCAPdroid-mitm:
方式 | 链接 |
---|---|
github | https://github.com/emanuele-f/PCAPdroid-mitm/releases |
网盘 | https://data.linux-code.com/?dir=filelist/Software/PCAPdroid-mitm |
如需在wireshark中显示APP名称,则需要安装官方提供的lua脚本,脚本链接:
方式 | 链接 |
---|---|
github | https://github.com/emanuele-f/PCAPdroid/blob/master/tools/pcapdroid.lua |
网盘 | https://data.linux-code.com/?dir=filelist/Software/PCAPdroid |
三、抓包实战
1.实时抓包
显示为就绪状态后,点击就绪或上面的开始按钮:arrow_forward:便可开始捕获,之后到连接页面可以实时查看所有的连接:
不难发现,这些连接会标注是哪些APP进程产生,并显示目的域名、协议、端口,以及连接状态等基本信息。
1)过滤特定目标
左图通过搜索框过滤特定目标主机,可以看到这些连接目前已经是关闭状态(CLOSED),因为用的是短连接场景;任意点选一个连接可以看到概览信息,包括连接持续时间,访问的URL、协议、进程APP和进程ID,以及产生的流量大小和载荷长度:
2)查看HTTP请求和载荷
此外,HTTP以及载荷选项可以清晰看到这条TCP连接,所请求的内容和响应的内容:
这些文本可以任意复制或导出。
甚至可以显示为十六进制格式,点击右上角的格式转换即可,如右图所示:
2.保存为PCAPNG格式进行分析
1)解锁并启用PCAPNG格式转储选项
存储为PCAPNG格式,付费后解锁的功能,目前价格是13港币即可解锁,并且解锁后允许进行TLS解密,在设置里面勾选即可:
2)设置数据包转储
数据包转储分为三类:
- HTTP服务器转储:安卓将会启动一个HTTP服务,提供PCAP包的下载;
- PCAP文件:直接以PCAP格式文件存储到手机;
- UDP导出器:发送PCAP文件到一个远程UDP接收器。
没有特殊需求,最直截了当的方式建议选择第二种。
3)实时抓包并保存为pcapng格式
以第二种转储方式为例,点击就绪进行抓包,会以时间格式对数据包文件进行命名:
之后暂停抓包,在文件管理器里找到我们转储的抓包文件:
导出到电脑上使用wireshark打开看看:
打开后是标准的数据包格式和完整交互的报文,包括TCP握手、DNS查询、TLS握手等,到这一步几乎已经秒杀目前市面上所有的安卓端抓包软件。
ICMP和UDP也能全部捕获到:
4)wireshark安装lua插件显示APP名称
可选项,官方提供了一个lua脚本,在wireshark中启用此脚本后,可以看到每一个数据帧对应的进程APP是谁:
前提:
①PCAPdroid开启了PCAPdroid Trailer选项,并禁用了PCAPNG格式(禁用PCAPNG格式依然不影响你转储PCAP格式文件):
②安装官方提供的lua插件
在本文安装章节,有下载链接,把脚本下载到本地后,点击wireshark的 Help(帮助) --> About Wireshark(关于wireshark) --> Folders(文件夹)选项,找到Lua插件目录,可以是全局Lua插件目录也可以是个人Lua插件目录:
将pcapdroid.lua插件脚本放到以上两个目录之一里即可,之后重载报文。
之后在编辑选项里添加列,字段为pcapdroid.appname:
然后使用PCAPdroid抓包,转储为PCAP格式文件,用wireshark打开,可以看到可以正常显示每个连接来源的APP名称:
因此可以通过这个字段的值来过滤请求,比如,只想要Chrome浏览器产生的tcp 80/443端口的报文,可以是:
代码语言:txt复制pcapdroid.appname == Chrome && tcp.port in {80,443}
同时,如果APP名称包含中文,则中文部分可能会显示为乱码,在github给作者提过issue,表示后续版本会修复,因此如果对这个字段有强需求并且APP涉及中文字符的,可以将手机语言设置为英文临时解决。
使用tshark可以更方便的将报文的APP字段做文本统计分析,比如按照APP产生的报文数量从高到低排序可以是:
代码语言:txt复制tshark -X lua_script:pcapdroid.lua -n -q -r <抓包文件> -T fields -e pcapdroid.appname|sort -rn|uniq -c|sort -nr
3.解密https/tls报文
解密HTTPS/TLS报文,前提需要安装一个附加组件,并且使用这个附加组件来启动PCAPdroid。
1)安装PCAPdroid-mitm
在设置页面勾选TLS解密,点击下一步会提示你如何安装附加组件:
2)导出并安装CA证书
PCAPdroid mitm使用mitmproxy代理TLS会话,因此需要导出PCAPdroid mitmproxy的CA证书,并且在安卓系统设置里安装证书,证书名称任意:
3)启用TLS解密功能
安装完毕后,使用PCAPdroid mitm打开PCAPdropid,在设置里便可成功勾选启用TLS解密功能:
4)添加解密规则
这些规则指定解密哪些连接。规则指定可以从三个维度进行:
- 应用程序
- 主机Host
- IP地址
比如我们添加两个APP的解密,华为浏览器和网易云音乐:
之后我们开始抓包,并且分别打开浏览器和网易云两个APP让其产生流量,再点击右图中的过滤器,选择左图中的已解密选项,即可过滤已解密的连接:
点击连接详情,便可看到解密后的明文内容:
4.应用程序统计分析
在应用程序选项可以统计分析各个引用所产生的流量和连接:
5.IP归属数据库
执行离线查询,显示国家和ASN信息。
设置里面可以下载IP地址数据库:
下载后,抓包信息里面会显示IP归属地和ASN号:
这是个离线数据库,存在手机内部,供PCAPdroid使用,不会调用任何第三方API接口查询IP归属地。
6.抓取IPV6流量
如需抓取IPv6流量,在设置选项最底部,选取即可:
如果是数据流量通信,部分流量可能会是V6协议通讯,因此此选项很有用。
V6也照抓不误,依然可以用wireshark打开分析:
7.提取SNI NAME/DNS查询/HTTP URL
虽然HTTPS加密了报文,但在TLS握手阶段,至少是会展示Server_name的,可以通过这个字段来判断哪条TLS流对应请求哪个域名,过滤规则可以是:
代码语言:shell复制tls.handshake.extensions_server_name
同理,可以通过dns查询字段过滤出DNS查询的域名:
代码语言:shell复制dns.count.queries >=1 && dns.flags.response == false
提取HTTP协议请求URL,在wireshark的Statistics(统计) --> HTTP --> Rquests(请求) 页面即可查询:
使用tshark提取:
代码语言:shell复制tshark -n -q -r <filename> -z http_req,tree
或者配合正则提取:
代码语言:shell复制tshark -n -r <filename> -V |& grep -Po '(?<=Full request URI:s).*(?=])'
四、总结
PCAPdroid是一个开放源码的网络捕获和监控工具,无需root权限即可运行。常见的功能包括:
- 分析安装到设备中的应用程序建立的连接
- 将抓包流量转储为PCAP文件,以便使用Wireshark进一步分析
- 解密特定应用程序的 HTTPS/TLS 流量
通过上面对PCAPdroid的详细介绍,不仅提高了对内部网络流量的可见性,还加强了对潜在攻击的防御能力。此外,能应对各种错综复杂的、需从底层抓包定位的场景,也更便于网络和应用之间的排障,并且无需root的情况下能像PC平台一样抓PCAP格式的包文件,光是此功能就已经秒杀目前市面上几乎所有的安卓端抓包软件。