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