在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" 错误了!

相关推荐
inmK113 小时前
蓝奏云官方版不好用?蓝云最后一版实测:轻量化 + 不限速(避更新坑) 蓝云、蓝奏云第三方安卓版、蓝云最后一版、蓝奏云无广告管理工具、安卓网盘轻量化 APP
android·工具·网盘工具
giaoho13 小时前
Android 热点开发的相关api总结
android
咖啡の猫14 小时前
Android开发-常用布局
android·gitee
程序员老刘15 小时前
Google突然“变脸“,2026年要给全球开发者上“紧箍咒“?
android·flutter·客户端
Tans515 小时前
Androidx Lifecycle 源码阅读笔记
android·android jetpack·源码阅读
雨白15 小时前
实现双向滑动的 ScalableImageView(下)
android
峥嵘life16 小时前
Android Studio新版本编译release版本apk实现
android·ide·android studio
studyForMokey18 小时前
【Android 消息机制】Handler
android
敲代码的鱼哇18 小时前
跳转原生系统设置插件 支持安卓/iOS/鸿蒙UTS组件
android·ios·harmonyos
翻滚丷大头鱼18 小时前
android View详解—动画
android