cat /data/system/packages.xml | grep userId | grep com.qiyi.video
无感知抓包是一种用于分析应用程序流量的方法,通过抓包可以获取应用程序的网络数据。常见的抓包方式是将手机设置为代理,将流量导向抓包软件。然而,这种方式容易被应用程序检测到。那么有没有一种不容易被检测到的方式呢?答案是肯定的。
下面分享几种可以实现无感知抓包的方法,其中前两种方法可以绕过SSL Pinning,即应用程序无法检测到抓包行为。
一、利用手机热点将流量导向抓包软件
这种方法有多种实现方式,我将介绍我目前使用的一种方式来说明思路:
- 准备两部手机,一部用于开启热点,另一部用于抓包。
- 在开启热点的手机上,需要满足以下要求:已经获取Root权限,能够同时连接WiFi和开启热点功能,已安装”VPN热点”和”Postern”软件。
这个热点的作用是将连接到该热点的手机的流量导向抓包软件。首先,使用Postern将抓包软件设置为我们抓包手机的VPN代理,然后开启VPN热点,将VPN作为热点共享出去。 - 将抓包手机连接到热点。
抓包手机需要满足以下要求:已安装抓包软件的证书。
连接到开启热点的手机后,手机的流量就会通过热点流向抓包软件,这样我们就可以在抓包软件中看到连接到热点手机的流量,包括HTTPS流量。
特点:只需准备两部手机,即可方便地进行抓包操作。
二、基于透明代理对特定应用程序进行抓包
在安卓系统上,每个应用程序在安装后都会被分配一个唯一的用户ID(User ID),该用户ID的生命周期从应用程序成功安装开始,直到用户卸载应用程序结束。应用程序的包名和用户ID之间的映射关系可以在系统的”/data/system/packages.xml”文件中找到。
通过透明代理的方式,可以对特定应用程序进行抓包。具体步骤如下:
- 修改redsocks.conf文件。
这个文件用于配置透明代理规则。
特点:只需一部手机,但操作步骤较多。
三、使用r0capture进行抓包
r0capture是一种无视SSL Pinning的抓包工具,可以直接使用,无需额外配置。
四、获取HTTPS会话密钥以解密通信内容
使用tcpdump抓取网络流量,并通过Wireshark进行分析,这种方式也是应用程序无感知的。然而,由于HTTPS通信是加密的,无法直接查看或分析明文内容。HTTPS通信是通过非对称加密协商出一个用于对称加密的密钥,然后使用该密钥进行通信的。如果我们能够获取到这个密钥,就可以解密出明文内容了。
在我们拥有手机的情况下,获取密钥是可行的,但是如何获取这个密钥,需要对HTTPS通信有更深入的理解。
进一步说,每个TCP连接的HTTPS使用不同的密钥,要自动记录密钥并生成一个供Wireshark分析的文件(Pre-Master-Secret log filename),工作量也不小。
此外,我们还需要对不同的SSL/TLS库进行兼容处理。Android应用程序可能使用不同的SSL/TLS库,包括系统提供的javax.net.ssl库、OpenSSL或BoringSSL、其他SSL/TLS库以及应用程序自定义的SSL/TLS库。
特点:无视SSL Pinning!但仍需进一步实现,工作量巨大。
以上是几种实现无感知抓包的方法,每种方法都有其特点和适用场景。根据具体需求和条件,选择合适的方法进行抓包操作。