目录
- 概述
- 不同版本 Android 的策略
- 抓包局限
- 手机虚拟机简介
- 信任证书
- 导出证书
- 计算证书哈希值
- .pem 等格式
- .crt/.cer 等格式
- 将证书放入到 system 的对应路径下
- 抓包
- 虚拟机-电脑抓包
- 虚拟机-手机抓包
- 其他
- 为什么我选择了 VMOS PRO
- 其他
概述
Android 7 开始,只信任预装的系统 CA,而 Android 6.0 之前默认情况下还会信任用户添加的 CA 存储区。这就导致在 Android 7 上无法直接对 HTTPS 的请求进行抓包。具体参见 Google Android 官方这篇文档 网络安全配置
不同版本 Android 的策略
对于 Android 7 及以上,可以使用配置了自定义可信的 CA 的 debug 包进行开发时的抓包,或者将用户的 CA 添加到系统 CA 目录中,但这需要 root 权限。
对于 Android 7 以下,用户的 CA 证书可以直接被信任,直接进行抓包操作,但是某些 APP 可能不兼容较早的系统。
抓包局限
电脑常用的抓包软件有 Charles
、Fiddler
等。当手机没有 root 权限的时候,只能安装证书到用户的目录,是不会被系统所信任的,这种情况只能抓取 HTTP 请求或者是打包的时候添加了相关信任配置的 APP,一般是项目组内开发测试多用的 debug 包,然而发布正式版的时候会将该配置关闭。
当手里有 debug 包的时候是最方便的。只需要使用抓包软件,如 Charles
、Fiddler
等,按照网上的教程简单配置并在手机上安装对应的证书,然后就能进行抓包了。
有 debug 包是最理想的情况,但是某些情况手里只有 release 版或者想抓包其他 APP 的话,安装用户证书是不行的。而将证书安装到系统目录下需要 root 权限,很多手机无法很好地 root 或者 root 之后会有一系列问题,导致无法将证书安装到系统目录下。
当然,寻找一个可以很好 root 的手机,或者是在电脑上使用模拟器的确是个不错的解决方案,但是这个手机并不一定会一直随身携带,同时电脑模拟器会占用较大的资源,也会影响效率,因此在手机能有一个能够抓包的环境也较为重要。
手机虚拟机简介
这两年手机的硬件配置日渐提升,手机也有了运行虚拟机的能力。市面上也有不少类似的产品,这些产品的原理并不知道,但是能够很好地模拟了一个手机的环境,并且能够方便在真机上运行。
如下列举部分手机用虚拟机,一般可以在各大手机应用市场中下载到。
VOMS 官网:http://www.vmos.cn/product_center.htm VMOS PRO 官网:http://www.vmos.cn/product_center_vmospro.htm 光速虚拟机官网:http://www.gsxnj.cn/index/ 51 虚拟机官网:https://51xnj.com/
手机虚拟机的出现,能在手机中运行额外的系统,可以同时运行多个相同的 APP,如果带有 root 权限可以进行一些高权限的操作。虚拟机一般包含了 root 权限,所以可以用它来进行抓包。
信任证书
将 CA 证书添加到系统目录的方法很简单,但是需要 root 权限。当使用虚拟机或者手机有 root 权限后即可操作,步骤如下:
导出证书
首先导出证书。Charles
导出的可能为 .pem
格式的证书,如 Charles.pem
,Fiddler
导出的可能为 .crt
格式的证书,如 FiddlerRootCertificate.crt
。其他抓包软件有各自的格式或者命名。
计算证书哈希值
计算不同证书的哈希值需要不同的参数。此处使用 openssl
工具来计算。如果系统不自带,可以自行安装。
.pem 等格式
openssl x509 -inform PEM -subject_hash_old -in 证书路径
.crt/.cer 等格式
openssl x509 -inform DER -subject_hash_old -in 证书路径
-inform
有三种参数,分别是 DER
, NET
, PEM
,此处仅介绍两种。
第一行 8 位十六进制数就是它的哈希值,例如下图
将证书放入到 system 的对应路径下
计算出哈希值之后,将证书重命名为 哈希值.0
的文件,比如上图的为 bb84ffc3.0
,然后将该证书放入 Android 手机的 /system/etc/security/cacerts/
下即可(首次使用可能需要 root 权限)。然后去手机的证书目录就能找到,若未看到可以尝试重启。此步骤完成之后,证书则已经被加入到可信任的列表中了。
抓包
以下操作都以 VMOS PRO
虚拟机为示例,其他虚拟机类似。
去应用市场下载 VMOS PRO
后,打开下载镜像。这里安装的是 Android 7.1 精简版(64位)
的版本,真机为 Android 11。下载完成后即可使用。不过 VMOS PRO
会包含一些广告。
然后需要导入真机上面的应用,在“文件传输”中即可导入。部分 APP 可能直接导入安装失败,需要下载 APK 包进行安装。
虚拟机-电脑抓包
打开 WLAN 设置,设置代理 IP 和端口号为电脑本地的 IP 与端口,即可抓包。
设置完成后,打开电脑相关的软件,此处使用 Charles
进行抓包。这里对线上的“知乎” APP 进行抓包,获取热榜数据。
当电脑切换不同环境或者 host 后,也能通过代理生效。同时,虚拟机的代理设置与真机的代理设置并不冲突或者共用,也就是说,当手机不设置代理直连线上环境时,虚拟机可以使用代理连接电脑走其他环境。
虚拟机-手机抓包
关闭代理网络设置,打开抓包软件,例如 HttpCanary
等,即可进行抓包。这种情况下,便于在电脑不在身边时进行抓包。
此处以 HttpCanary
为抓包软件实例。
打开 HttpCanary
后,开启抓包,会建立一个 VPN,然后代理流量。在 VMOS PRO
打开线上的 微博
APP 在热搜榜随意点开一个热搜话题进行抓包,可以得到下面的内容。
即可在手机上便捷地进行抓包了。
其他
为什么我选择了 VMOS PRO
这里使用 VMOS PRO
是与我自己手机兼容性和易用性考虑的。一开始使用的是 VMOS
,但这是 Android 5.1 的系统,过于老旧,某些 APP 在这上面可能无法运行。后来使用光速虚拟机后,发现有个我想要抓包的线上 APP 无法正常启动,后来下载了 VMOS PRO
后目前使用的 APP 都能顺利启动并且抓包。
但是 VMOS PRO
并不是完全免费的,开启 root 权限等一些高级功能需要会员,但是是否开启 root 不影响对 /system
目录的读写。同时 VMOS PRO
有多个 Android 版本的镜像可以选择,也可同时运行多个虚拟机(需要会员)来进行并行的调试和抓包。
我这里也没有使用 平行空间
APP,因为 平行空间
APP 在我的 Android 11 的手机上无法正常启动 APP,也无法验证抓包。
其他
运行虚拟机需要较大的内存。内存较小的手机可能会被杀后台等情况。同时升级了 Android 高版本之后,可能某些软件无法正常运行,此时运行虚拟机也是一个临时的解决方案。