一般情况下的抓包模式是一种称之为“中间人”抓包的形式,既通过系统 Proxy 配置把网络请求转发到一个充当中间人的程序上(如 Charles、FIddler),再由该抓包程序进行网络请求的转发。这个过程中,抓包软件可以对 HTTP 层面的数据进行记录和展示。
“反抓包”是比较常见的 App 网络安全策略。对于上述的这种抓包模式,一种常见的反抓包策略是强制 App 不使用系统配置的 Proxy,由此避免网络流量被抓包软件截获。
这类策略,给日常的问题排查或研究带来了一些不便。本文将介绍一种绕过该安全策略的通用方法,实现对目标 App 的网络包捕获。
1. 基本原理
第 1 节简单介绍了一般抓包原理和“反抓包”策略。可以看到,绕过“反抓包”策略的关键是如何转发流量到“中间人”设备上。
现有的 App 市场上有一类可以帮助用户实现连接私有特殊协议的 VPN 工具软件,如 Kitsunebi。这类 App 的基本原理是:1. 构建一个 OS 级别的 VPN 通道;2. 构建一个本地的代理服务客户端程序;3. 通过 VPN 通道截获本地流量,转发到本地代理服务的客户端程序上,再由该客户端通过指定的代理协议转发流量到远程的代理服务器上,打通通信隧道。
我们注意到,VPN 通道可以实现全局的 TCP 层面数据转发,加上远程代理服务器是由客户端软件配置的,因此,可以实现不依赖 OS Proxy 配置的流量转发。另外,这类 VPN 软件一般支持 SOCKS5 代理协议,而“中间人”抓包软件往往也支持 SOCKS5 代理服务。结合这两个特性,可以实现的抓包拓扑为:目标 App 的通信通过 VPN 通道转发到本地代理客户端,由本地代理客户端转发流量到代理服务器上,该代理服务器实际是我们的抓包软件,再由抓包软件把请求转发到目标应用服务器上。基本原理如下图所示:
在这个流程中,抓包软件可以截获流量,从而实现对 HTTP 的记录和展示,以及 HTTPS 报文的解密。
2. 实施步骤示例
物料准备:
- 手机(以 iOS 为例)
- 一个支持 SOCKS5 代理能力的工具 App(以 Kitsunebi 为例)
- “中间人”设备和软件(以 Mac 和 Charles 为例)
2.1 抓包工具配置
以 Charles 为例,主要的配置步骤就是打开 SOCKS 代理服务:
2.2 客户端配置
以 iOS/Kitsunebi 为例,基本步骤如下:
在 Kitsunebi 中选择全局转发模式(简单高效):
新建一个 SOCKS 代理服务配置,并指向 Charles 机器 IP 和已配置的 SOCKS 服务端口:
配置启用该 SOCKS 代理:
启用 Kitsunebi VPN 服务:
2.3 验证
此时,原来配置了“反抓包”策略的 HTTP 流量应该可以被 Charles 捕获:
3 小结
这里介绍了一种通用的绕过“强制不走 OS Proxy 反抓包策略”的 HTTP 报文捕获方法,解释了原理和一种实施途径。在实践中,可以结合实际情况通过不同的工具组合在不同的平台上实现该方法。