在gpt的帮助下安装chales的证书,用于https在root情况下抓包

Charles证书安装到系统证书区步骤(适合红米Note8Pro)

1. 先导出 Charles 的证书(.pem 格式)

  1. 打开 Charles → 菜单 HelpSSL ProxyingSave Charles Root Certificate

  2. 保存出来的文件是 .crt 格式,比如 charles-ssl-proxying-certificate.crt

  3. .crt 文件改后缀.pem(如果 Charles 没直接保存成 pem)

    • 有些版本直接是 .pem,如果不是,自己改成 .pem,或者用 openssl转。

2. 转换为系统格式(必须是 DER编码

Android 的系统证书要求是 .0文件,格式有要求。

打开终端(电脑上有 openssl)执行:

bash 复制代码
# 先转换成 der 格式
openssl x509 -inform PEM -outform DER -in charles-ssl-proxying-certificate.pem -out charles.der

# 然后计算哈希(重要!)
openssl x509 -inform DER -subject_hash_old -in charles.der | head -1

例如,输出是:

复制代码
9a5ba575

这一步得到哈希值,比如这里是 9a5ba575

然后执行:

bash 复制代码
# 把 der 格式的证书重命名为 哈希值.0
mv charles.der 9a5ba575.0

这样,你就得到了一个叫 9a5ba575.0 的文件。

如果报错问一下ChatGpt报错的原因 比如我就是

lua 复制代码
PS C:\Users\Admin\Desktop> openssl x509 -inform DER -subject_hash_old -in charles.der unknown option -subject_hash_old usage: x509 args -inform arg - input format - default PEM (one of DER, NET or PEM) -outform arg - output format - default PEM (one of DER, NET or PEM) -keyform arg - private key format - default PEM -CAform arg - CA format - default PEM -CAkeyform arg - CA key format - default PEM

**你的 openssl 版本太新了,不支持 -subject_hash_old 参数 从 OpenSSL 3.x 开始(比如 OpenSSL 3.0/3.1),
-subject_hash_old 被移除了,只保留了 -subject_hash
但是 Android 系统(尤其是 Android 7/8/9)要求用的是 "old hash",否则证书名字对不上。

你的当前操作建议

执行这条:

复制代码
openssl x509 -inform DER -subject_hash -in charles.der

拿到输出的哈希值,比如:

复制代码
a1b2c3d4

然后把 charles.der 改名成:

复制代码
a1b2c3d4.0

继续 push 到 /system/etc/security/cacerts/

安卓11要安装到系统目录 修改 /system 权限

手动 remount /system 分区

理论上可以 adb shell 下试:

bash 复制代码
adb shell
su
mount -o rw,remount /system

报错:PS E:\Goolge Download> adb shell begonia:/ $ su begonia:/ # mount -o rw,remount /system mount: '/system' not in /proc/mounts

ChatGPT 说:

好,很标准的错误提示:

bash 复制代码
mount: '/system' not in /proc/mounts

意思是:

你的系统根本就没有把 /system 单独挂载出来,它其实是挂载在 / (根目录)下面的。

这就是 Android 10/11 开始使用的 system-as-root 架构。

简单讲:

  • /system 不是一个独立挂载点了。
  • 真正挂载的是整个 / 根目录(/ 包括了 /system 这些子目录)。
  • 所以你不能直接 mount -o rw,remount /system
  • 你要 remount 的其实是 根目录 /

正确一点的操作方式

你要改成 remount / 根目录:(这里一次不行就多操作几次,我都是第二次输入命令行才行的!!!!

复制代码
mount -o rw,remount /

是的,你这一步已经成功 remount 根目录 / 为可写(rw)了!

注意看:

  • 第一次 mount -o rw,remount /system 报错 ❌(正常)
  • 然后你改成 mount -o rw,remount /
  • 没有任何错误提示
  • 直接回到了命令行,这就代表:成功了

🔥 现在你的系统是【临时可写】状态了!

什么意思?

  • 现在 你可以操作 /system 下的文件,比如复制 Charles 证书。
  • 但是重启手机后会失效,因为这个挂载是临时的(系统开机会重新挂成只读)。

所以:抓紧时间干你要干的事情,比如:


🔥 接下来干什么?( Charles证书安装流程 )

比如你要把 Charles 证书安装到系统证书,就这样做:

  1. 把 Charles 导出的证书文件(一般叫 charles.pem.crt)转成正确格式。
  2. 生成对应的哈希名,比如 9a5ba575.0 这样的名字。
  3. 把文件推送到 /system/etc/security/cacerts/ 目录。
  4. 修改证书文件权限,设成 644(-rw-r--r--)。
  5. 重启手机(让系统信任证书)。

adb推送证书到手机 /system

执行:

bash 复制代码
adb push 9a5ba575.0 /sdcard/
adb shell
su
cp /sdcard/9a5ba575.0 /system/etc/security/cacerts/
chmod 644 /system/etc/security/cacerts/9a5ba575.0

3. 最后,重启手机(我没有重启手机也可以了,所以因人而异吧)

执行:

复制代码
reboot

或者手动重启。

重启后,系统就会信任 Charles 的证书,抓 HTTPS 流量就不会出现 "SSL Pinning" 错误了!

相关推荐
xiangpanf13 小时前
Laravel 10.x重磅升级:五大核心特性解析
android
robotx16 小时前
安卓线程相关
android
消失的旧时光-194316 小时前
Android 面试高频:JSON 文件、大数据存储与断电安全(从原理到工程实践)
android·面试·json
dalancon17 小时前
VSYNC 信号流程分析 (Android 14)
android
dalancon17 小时前
VSYNC 信号完整流程2
android
dalancon17 小时前
SurfaceFlinger 上帧后 releaseBuffer 完整流程分析
android
用户693717500138418 小时前
不卷AI速度,我卷自己的从容——北京程序员手记
android·前端·人工智能
程序员Android19 小时前
Android 刷新一帧流程trace拆解
android
墨狂之逸才19 小时前
解决 Android/Gradle 编译报错:Comparison method violates its general contract!
android
阿明的小蝴蝶20 小时前
记一次Gradle环境的编译问题与解决
android·前端·gradle