安卓高版本抓包解决

Table of Contents

迁移charles到系统证书

  • 安卓4.4之前手机信任用户证书,配置好代理在浏览器访问 chls.pro/ssl 安装charle证书即可。

    最好使用第三方手机浏览器进行下载。有部分浏览器下载的.pem的不能安装,换个浏览器下载就行。正确的是.crt格式

  • 安卓4.4之后手机不在信任用户证书

    解决证书信任问题有两种办法。 在app里设置信任用户证书,这样的话需要重新打包。 或者把charles的证书设置为系统证书。

    以下是第二种方式,不用涉及到重新打包

    1. 首先需要获取手机root 权限

    2. 同样先下载charles证书到手机,先安装到用户证书上。

      用户证书安装路径
      /data/misc/user/0/cacerts-added
      系统证书安装路径
      /system/etc/security/cacerts
      
      其中的每个证书的命名规则如下:
      <Certificate_Hash>.<Number>
      文件名是一个Hash值,而后缀是一个数字。
      文件名可以用下面的命令计算出来:
      openssl x509 -subject_hash_old -in <Certificate_File>
      后缀名的数字是为了防止文件名冲突的,比如如果两个证书算出的Hash值是一样的话,
      那么一个证书的后缀名数字可以设置成0,而另一个证书的后缀名数字可以设置成1
      
    3. 先安装到用户证书的目的就是不用计算证明的命名Hash值

    4. adb 命令进入到用户证书路径下,查看证书所属权限和所属组,不对则需要修改成root用户。

      adb shell
      cd /data/misc/user/0/cacerts-added
      chmod 644  <xxxx>.0
      chown root <xxxx>.0
      chgrp root <xxxx>.0
      
    5. 然后要调整安卓system分区权限,不然移动证书到根证书会报错 只有可读权限#

      # 查看system 权限
      mount | grep /system    
      #  查看system 路径
      cat /proc/mounts
      
      # 一般为 /dev/xxxx/xxxx /system
      # ro表示只读,rw表示读写
      mount -o rw,remount /dev/xxxx/xxxx /system
      

      system目录权限调整后,误删文件系统会崩溃。 最好改回去…

    6. 然后移动用户证书目录到系统证书就可以了。

      mv <xxxx>.0 /system/etc/security/cacerts/
      
    7. 重启手机或者模拟器

      adb reboot     #  或者手动重启
      
    8. 然后就可以愉快的抓包了