Android 7.0+ HTTPS 抓包方案
从 Android 7.0 开始,Google 增强了系统安全性,默认不再信任用户安装的证书,这导致了无法正常进行 HTTPS 抓包。本文介绍如何解决这个问题,让 HTTPS 抓包工具(如 Charles, Fiddler, mitmproxy 等)重新工作起来。
问题背景
在 Android 7.0 之前,我们只需安装抓包工具的证书到设备上,就能轻松抓取 HTTPS 流量。但 7.0 后,系统将证书分为两类:
- 系统证书:安装在
/system/etc/security/cacerts/
目录下的证书 - 用户证书:安装在
/data/misc/user/0/cacerts-added/
目录下的证书
默认情况下,应用只信任系统证书,而用户安装的证书被归类为用户证书,导致大部分应用的 HTTPS 流量无法被抓取。
解决方案
想要在 Android 7.0+ 设备上成功抓包,我们需要将用户证书添加到系统信任证书中。为此,我们需要:
- 获取 Root 权限(通过 Magisk)
- 安装 AlwaysTrustUserCerts 模块
先决条件:安装 Magisk
要完成操作,首先需要在设备上安装 Magisk 获取 Root 权限。详细步骤请参考我的另一篇文章:Android Magisk 安装指南
安装 AlwaysTrustUserCerts 模块
-
下载模块:从 GitHub Releases 下载最新的 AlwaysTrustUserCerts.zip 文件
-
传输文件到设备:使用 adb 命令将插件发送到手机
-
通过 Magisk 安装模块:
- 打开 Magisk 应用
- 点击底部菜单中的"模块"选项卡
- 点击"从本地安装"按钮
- 选择刚才传输的 AlwaysTrustUserCerts.zip 文件
- 等待安装完成,然后重启设备
工作原理
AlwaysTrustUserCerts 模块的原理很简单,它会自动将用户安装的证书从 /data/misc/user/0/cacerts-added/
复制到系统证书目录 /system/etc/security/cacerts/
中:
验证证书是否生效
重启设备后,打开设备的安全设置,查看证书存储区。如果之前安装的用户证书现在显示在"系统"或"受信任的凭据"部分,则表示模块安装成功。
现在可以正常使用 Charles、Fiddler 或其他抓包工具来分析 HTTPS 流量了。
其他解决方案
除了使用 Magisk 模块外,还有其他方案可以解决这个问题:
- 网络安全配置:应用开发者可以在 AndroidManifest.xml 中添加网络安全配置,允许应用信任用户证书
- Xposed 框架:使用 TrustMeAlready 等 Xposed 模块绕过证书校验
- 修改系统文件:直接修改系统文件(需要 Root 权限)