安卓端PCAPdroid抓包指南: 无需Root或代理即可转储PCAP格式

2024-05-14 08:08:21 浏览数 (2)

一、前言

安卓客户端,时常遇到需抓包定位的问题,而想要在系统内抓包,目前已知比较流行的,无非以下几种情形:

  • 手机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格式的包文件,光是此功能就已经秒杀目前市面上几乎所有的安卓端抓包软件。

0 人点赞