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

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

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

  1. 打开 Charles → 菜单 Help → SSL Proxying → Save 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" 错误了!

相关推荐
_祝你今天愉快1 小时前
UI核心 - 绘制流程(测量、布局、绘制)
android
冬奇Lab2 小时前
LLM 驱动的自动化测试系列(07):移动端自动化(三)——Mobile-Agent-v3 与自研 GUI-Owl 模型路线
android·人工智能·测试
leobertlan5 小时前
痛苦系列 | DSP-02 频域切片:DTFT与DFT的探索
android·后端
leobertlan6 小时前
痛苦系列 | DSP-01 从连续到离散:DSP基础与采样
android·后端
事圆则缓8 小时前
Android 视频压缩上传实战:从 content Uri、转码到断点续传
android
冉冉同学11 小时前
AI Agent 开始操作真实手机:移动端自动化的 3 个新考点
android·ai编程
帅得不敢出门12 小时前
Android Framework关闭软件低电关机功能测试PMIC低电保护
android
恋猫de小郭13 小时前
Flutter + EmbeddingGemma 2,谷歌发布完全端侧的 AI Edge Foresight
android·前端·flutter
墨天梦14 小时前
B16_Material主题与可访问交互
android·kotlin·交互
弯_弯14 小时前
企业知识库 RAG 落地:从 Demo 到生产,四条工程链路与参数级自查
android·java·javascript