解决 Android 7 及以上的安卓系统模拟器, 无法抓包 https 请求

Posted May 6, 2023 by clannadzsy  ‐  1 min read

在Android 7及以上版本中,由于系统对证书的限制,使用抓包软件(如Fiddler、Charles)进行HTTPS抓包会遇到困难。下面介绍一种解决方案。

生成证书

首先需要将证书生成在本地电脑上,可使用cer或pem格式。然后通过openssl计算证书hash值:

cer格式证书

openssl x509 -inform DER -subject_hash_old -in <证书文件.cer>

pem格式证书

openssl x509 -inform PEM -subject_hash_old -in  <证书文件.pem>

然后生成系统预设格式的证书文件(记得加上".0"),如果hash值一样,则另一个设置成.1:

cer格式

openssl x509 -inform DER -text -in xxx.cer > hash值.0

pem格式

openssl x509 -inform PEM -text -in xxx.pem > hash值.0

安装证书

将证书安装到系统中:

  1. 手机连接电脑,使用adb命令将手机连接到电脑。
  2. 禁用系统验证:
    adb root
    adb disable-verity
    adb reboot
    adb root
    adb remount
    
  3. 将证书文件push到手机:
    adb push <证书文件hash.0> /system/etc/security/cacerts/
    
  4. 重启手机。

如果在adb disable-verity这步出现失败,则需要进行提权:

  1. 进入adb shell:
    adb shell
    
  2. 切换为root用户:
    su
    
  3. 修改/system分区为可读写模式:
    mount -o rw,remount /system
    
  4. 进入证书目录:
    cd /system/etc/security/cacerts/
    
  5. 将分区改为可读写模式:
    mount -o rw,remount /
    
  6. 修改证书文件:
    vi <证书文件hash.0>
    

    将证书内容的-----BEGIN CERTIFICATE----------END CERTIFICATE-----段落从文件末尾移动到文件开头,然后保存退出。

  7. 退出adb shell:
    exit
    
  8. 重新执行第3步及以后的步骤。

修改抓包软件设置

如果在使用Charles进行HTTPS抓包时,发现证书无法生效,需要手动修改.0和.1文件,将证书内容的 -----BEGIN CERTIFICATE----- . . . . . . -----END CERTIFICATE-----

段落从文件末尾移动到文件开头。 通过以上操作,就可以在Android 7及以上版本中使用抓包软件进行HTTPS抓包了。

参考链接