番茄小说 App 抓包复盘,绕过 SSL Pinning
前言
最近因为个人需求,需要对番茄小说 App 进行抓包,因为番茄小说网页版功能不全,并且 App 自己也进行了一些防护,导致抓包难度提升了一个台阶。最终花了2小时验证了两种方案,抓到了所有想要到的请求。
抓包软件
Web 抓包很简单,F12 就可以看到所有请求,然而 App 抓包需要使用到专业的抓包工具,我推荐一些常用的抓包软件
- Windows/Mac:Charles / Proxyman / Wireshark
- Android:Packet Capture
- IOS:Stream
Charles:https://www.charlesproxy.com
Proxyman:https://proxyman.com
Wireshark:https://www.wireshark.org/
抓包方案
不推荐使用移动端抓包工具,因为有些 App 检测到代理软件(抓包软件本质也是个代理)会自动断网。所以本文使用的方法是将安卓手机和 PC 连接到同一无线网,使用 PC 抓局域网内移动设备的包。
本文以 Charles 为例,Proxyman 步骤几乎一摸一样。Charles 可以抓 http/https 的请求,如果要接密 https 请求,需要安装 Charles 证书,并添加至系统信任。

Help -> SSL Proxying -> Install Charles Root Certificate:PC 端安装 Charles 证书,添加至受信任的系统证书
Help -> SSL Proxying -> Install Charles Root Certificate on a Mobile Device or Remote Browser:移动端安装 Charles 证书
设置 SSL 代理的域名和端口,Charles 中打开 Proxy -> SSL Proxying Settings,支持通配符

需要注意的是,Android 7 及以后,用户级别的证书不受系统信任,进入番茄小说后,会没网,Android 6 及以前的设备现在几乎找不到了。IOS 系统试过同样也没网,所有 https 请求都报错握手失败,可以断定 App 使用了 SSL Pinning。解决方案有两个
- VirtualXposed + JustTrustMe 模块
- Root 手机,并将 Charles 证书提升至系统级别信任
VirtualXposed:https://github.com/android-hacker/VirtualXposed
JustTrustMe:https://github.com/Fuzion24/JustTrustMe
第一种方案使用 VirtualXposed+JustTrustMe 的方式可以免 Root,但是只能抓到番茄小说 v5 版本以下的包,高版本还是抓不到。操作步骤很简单,安装 JustTrustMe 模块后在 VirtualXposed 内克隆 App 后启动,此时打开就有网了,抓包软件就可以抓到请求了。
第二种方案则可以抓到最新版番茄小说 App 的所有包,缺点就是需要 Root 手机,不过没关系,可以使用模拟器啊。推荐两个安卓模拟器软件,雷电模拟器和夜神模拟器,自带 Root 选项。
雷电模拟器:https://www.ldmnq.com
夜神模拟器:https://www.yeshen.com
我使用的是第二种方案,用的是夜神模拟器,打开后自动开启 Root,修改 Wi-Fi 代理为手动,填入代理服务器主机名和代理服务器端口,代理选项可以在 Charles 中 Help -> SSL Proxying -> Install Charles Root Certificate on a Mobile Device or Remote Browser 中查看到。


安卓设备内浏览器访问 http://chls.pro/ssl 会自动下载 Charles 证书,此时如果添加证书信任默认只可以是用户级别,打开番茄小说会没网,原因是安卓系统权限限制。我们需要将证书提升至系统级别,在此之前需要我们改一下证书文件,使用 openssl 计算证书文件的 hash 值(charles.pem 为下载的 Charles 的证书)。
1 | openssl x509 -inform PEM -subject_hash_old -in charles.pem |

如上图所示,可以看到两个部分,第一部分是文件的 hash 值,将 charles.pem 文件命名为 e1f4a7b6.0,并将第二部分内容(—–BEGIN CERTIFICATE—– 至 —–END CERTIFICATE—–)添加到文件内容的开头,以此满足安卓系统对系统证书文件格式的要求。

在安卓系统内容安装 MT 管理器将 e1f4a7b6.0 文件移动至 /system/etc/security/cacerts/,查看系统信任的凭据就可以看到 Charles 的证书为系统,并默认开启信任了。
MT 管理器:https://mt2.cn

最后打开番茄小说就可以抓包并解密所有的 https 请求了
