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

相关推荐
前行的小黑炭1 小时前
Android Lifecycle代码分析:为什么使用;注解的方式为什么过期?源码分析;状态与事件
android
和煦的春风1 小时前
案例分析 | SurfaceFlinger 大片Runnable引起的卡顿
android·linux
浩宇软件开发2 小时前
Android开发,实现一个简约又好看的登录页
android·java·android studio·android开发
万户猴2 小时前
【 Android蓝牙-十】Android各版本蓝牙行为变化与兼容性指南
android·蓝牙
张风捷特烈4 小时前
FFmpeg 7.1.1 | 调试 ffmpeg.c 环境 - Widows&Clion&WSL
android·ffmpeg
努力努力再努力wz4 小时前
【Linux实践系列】:进程间通信:万字详解命名管道实现通信
android·linux·运维·服务器·c++·c
百锦再5 小时前
Android Studio 中使用 SQLite 数据库开发完整指南(Kotlin版本)
android·xml·学习·sqlite·kotlin·android studio·数据库开发
Gerry_Liang5 小时前
Java基础361问第16问——枚举为什么导致空指针?
android·java·开发语言
RichardLai886 小时前
[Flutter 基础] - Flutter基础组件 - Image
android·flutter