0. 目标
Android 手机直接使用 HttpCanary,获取一般应用的 Https 数据。
1. 背景
一般来讲,Https 抓包需要通过安装证书来实现类似中间人攻击获取数据的效果。
Android 7 之前,安装用户证书即可解决问题。Android 7 版本及以上的系统,不再信任用户级的证书,只信任系统级的证书。
如果只抓取自己开发的 App 的 HTTPS 请求,需要 App 开启网络安全配置,让 App 信任你的用户级的证书。但是如果抓取的是一般应用,很明显无法通过修改代码来达成目的。
此时的选择有:
方法 1:使用 Android 7.0 以下的真机 / 模拟器。Android 7.0 以下没有证书限制,所以可以简单配置用户证书然后直接抓包。但是该方法有几个缺陷:1、很多新应用包括抓包软件本身在 Android 老版本的兼容性上表现不好;2、AS 6.0 以下的模拟器不支持 wifi,无法设置代理。
方法 2:将用户级证书提权至系统级证书。没有方法 1 的缺陷,但是实现流程上较为复杂。
这里我们果断选择方法 2。
2. 实现流程
2.1 Root
将用户级证书提权至系统级证书涉及敏感操作,需要提升我们的权限。
这里博主使用的手机是小米(MIUI14,Android 13),Root 教程详见 此链接,其它机型请自行查找。
2.2 搭建 HttpCanary 抓包环境
下载 HttpCanary(请自行 Google),并安装 CA 证书至用户级。
由于高版本 Android 不允许直接安装 CA 证书,所以在 HttpCanary 初次启动安装证书时无法成功,只能选择跳过(注意,但还是要点选安装证书失败后再选择跳过,这样 HttpCanary 才会在它自身的目录下生成签名文件供我们后续使用)。
既然无法直装 CA 证书,那么将 CA 证书导出到 SD 后手动安装不就好了嘛?然而,HttpCanary 初始化完毕后,进入设置 - HttpCanary 根证书界面,会发现没有导出证书的选项,因此实际操作步骤如下:
- 准备一个 MT 管理器;
- 进入到 /data/data/com.guoshi.httpcanary.premium/cache/ 目录并找到 HttpCanary.pem 文件;
- 将 HttpCanary.pem 在当前目录下复制一份,并将其命名为 HttpCanary.jks;
- 重启 HttpCanary,重新进入 HttpCanary 根证书页面,会发现 App 提示证书已安装(其实并没有..)。
- 接下来终于有了 "导出 HttpCanary 根证书" 选项,点击,选择 Privacy Enhanced Mail(.pem) 选项。导出的证书默认在 /storage/emulated/0/HttpCanary/certs/ 目录下。
- 手动进入设置安装 CA 证书。以 MIUI 为例,依次点击 设置 - 安全 - 更多安全设置 - 加密与凭据 - 安装证书 - CA 证书,然后选择刚才导出的证书安装即可。
执行完上述步骤后,可以在 信任的凭据 - 用户 一栏中找到刚才安装的 CA 证书,证明我们的证书已被安装至用户级。
2.3 将用户级证书迁移至系统级证书
网上一种方法是先通过 HttpCanary 导出系统级根证书,然后将其拷贝到 /system/etc/security/cacerts/ 根证书目录下面。然而,高版本 Android 手机上,/system 不可写,即使有 Root 权限。也有说把 /system 重新 mount 成可读写的,还有说命令不对应当使用 mount -o remount -o rw / 的,这俩种方案我都试了,前者命令直接报错,后者命令虽然执行了,但是查看文件会发现并没有复制或移动证书成功。
另一种办法是使用 magisk 的模块 movecert,是可行的,具体步骤如下:
- 下载并安装 FoxMagiskModuleManager。因为原版 magisk 直接安装 movecert 会报错,所以使用 FoxMagiskModuleManager 替代 magisk 安装。
- 下载 movecert 压缩包,并 adb push 到手机上。
- 打开 FoxMagiskModuleManager,安装 movecert 压缩包,重启手机。
- 打开系统 - 加密与凭据,可以看到证书已经移动到系统级里。
参考链接里大佬提供了 FoxMagiskModuleManager & movecert 的方便下载的 网盘链接。
注意:系统证书里看到才算成功,如下:
系统证书界面至此,HttpCanary 可以正常抓取一般应用的 Https 数据了。
HttpCanary 抓包自己 Demo 中的 Https 请求3. 总结
为了在高版本 Android 上,HttpCanary 可以正常抓取 Https 数据,完整一图流如下:
一图流参考链接:
2024 最新版小米红米 ROOT 教程
Android11 小黄鸟安装 CA 证书以及解决抓包没网问题
Android10 及以上将证书从用户移动到系统
网友评论