起因

Android 7.0 之后 Google 默认不信任 User 域下的证书,也就是自行导入证书的方式去抓 HTTPS 包的方法已经不管用了,再加上现在大部分 App 都使用了 SSL Pinning,因此抓包的难度也比之前大了不少。此时再想抓 HTTPS 的流量就要用别的方法了。

如果你够强直接逆向了 App,然后在应用的证书信任的配置文件里添加上你的证书,那么你还是可以抓取这个 App 的流量的,但是这种方法工作量太大,针对不同的应用你还需要一个个逆向文件,成本实在太高。这里讲的方法还是相对省事省时间的方法。通过获取手机 Root 权限,将 BurpSuite 的证书导入系统域中,这样系统就会信任你的证书,达到抓取所有 App 流量的目的了。

方法

在进行之前确保你有以下的条件:

  1. 一部获取了 Root 权限的手机
  2. 电脑有 OpenSSL 环境

如果你有了上面的条件,下面开始开始操作

  1. 从 Brupsuit 中导出证书文件 cacert.der

  2. 将 Der 的证书转换为 PEM 格式 openssl x509 -in cacert.der -inform DER -out cacert.pem -outform PEM

  3. 获取证书的 hash openssl x509 -inform PEM -subject_hash_old -in cacert.pem | head -1 记住输出的hash,例如 '9a5ba575'

  4. 将证书内容输出到新文件中,文件名称格式为为刚刚输出的 hash + .0cat cacert.pem > 9a5ba575.0

  5. 将证书内容格式化后追加到刚刚生成的文件中,openssl x509 -inform PEM -text -in cacert.pem -out /dev/null >> 9a5ba575.0

  6. 将文件传入手机中adb push 9a5ba575.0 /system/etc/security/cacerts/

  7. 使用 ADB 连接手机,执行 adb shell 切换到 Root 权限,然后挂载/system, mount -o rw,remount /system,给你的证书文件加上权限 chmod 644 /system/etc/security/cacerts/9a5ba575.0

  8. 重启手机,查看证书是否安装完成

重启手机之后,可以去你的证书目录中查看下证书是否正常导入了,下面是正常的的状态。

photo_2019-06-04_00-07-36.jpg

尾声

除了导入证书,也有其他的方法来解决这个问题,比如通过 Xposed 插件的方法来实现抓包
如何使用Xposed+JustTrustMe来突破SSL Pinning
或者通过虚拟环境的的方式来抓包,比如使用 HttpCanary,好处是不需要 Root 你的手机
手机抓包+注入黑科技HttpCanary——最强大的Android抓包注入工具
你可以根据自己的实际情况来选择方案。