Android 7.0 及以上版本, https 抓包
前言
因为 Android 7.0
安全机制调整, 默认情况下 系统只信任内置的 CA
证书, 因此在使用 fiddler
, Charlse
这种通过手动安装 CA
证书,利用中间人抓包的软件都失效了.
当然,道高一尺,魔高一丈, 对于已经 Root
过的手机依然可以绕过这一限制.
三种方案
手动
首先导出 Charlse(fiddler也类似)的证书
在终端生成证书的md5 hash
值
1 | openssl x509 -subject_hash_old -in charles-ssl-proxying-certificate.pem |
Android 系统内置的证书命名规则是 <Certificate_Hash>.<Number>
因此我们把导出的证书改名为 e06b48f3.0
1 | mv charles-ssl-proxying-certificate.pem e06b48f3.0 |
改名后, 将证书移入到手机系统证书的目录 /system/etc/security/cacerts/
在设置中验证下, 是否出现 Charlse
的证书:
不出意外,抓包工具就能正常抓取 https
了.
由于 fiddler
的证书格式 cer
, 所以需要注意修改修下 -inform
参数, 然后计算 md5 hash
值:
1 | openssl x509 -inform DER -subject_hash_old -in FiddlerRoot.cer |
半自动
在设置中,选择 “从存储设备安装”, 选择我们 fidder
or Charlse
导出的证书.
当然此时,证书是安装在用户目录下的, 软件依然无法抓包.
我们使用文件管理工具, 譬如 Root Explorer
, 将 /data/misc/user/0/cacerts-added
目录下的 证书文件 移动到系统证书目录下 /system/etc/security/cacerts/
从安装后文件名其实可以看出,符合<Certificate_Hash>.<Number>
规则.
当然,为了一眼能找到我们导入的证书, 我们先清除用户证书路径下的所有问题件.
全自动
对于安装了 Magisk
的同学可以选择安装 Move Certificates 模块,当用户安装证书, 会hook
该操作, 自动将证书移入到系统路径下.
1 | mv -f /data/misc/user/0/cacerts-added/12abc345.0 $MODDIR/system/etc/security/cacerts |
写在最后
对于大部分App
, 替换证书后,利用中间人攻击,就可以抓包了.
但是部分App
会进行客户端的证书校验, 因此,仅仅替换证书可能依然无法抓包, 装了Xposed
的同学, 这里直接提供一个通用解决方案, 安装这个模块就OK.
原理就是hook
掉通用的证书校验, 对于特殊的校验方法, 我们也可以自己编写Xposed
模块破解.
Android 7.0 及以上版本, https 抓包