前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Android14手机Charles抓包配置记录

Android14手机Charles抓包配置记录

作者头像
rys
发布2025-02-13 15:53:48
发布2025-02-13 15:53:48
2120
举报
文章被收录于专栏:问题解决问题解决

知识补充

Charles原理简述:利用中间人攻击原理,电脑终端/手机终端设备安装Charles的CA证书,并信任其Charles证书。当电脑终端/手机终端设备发送HTTPS请求时使用Charles的CA证书,Charles会截取这个请求,伪装成终端向服务器发送请求。服务端返回的数据,Charles解密后再用自己的证书公钥重新加密数据后发送给客户端。

不同Android版本系统的网络配置变化:

  • Android6.0及以下既支持信任系统证书,也支持信任用户安装的证书。
  • 在Android7.0及以上,不再信任用户安装的证书,只信任系统证书。
  • 在Android14以下,系统证书存放在 /system/etc/security/cacerts
  • Android14系统证书则存放至/apex/com.android.conscrypt/cacerts

因此利用Charles对Android14设备抓包需要将Charles的CA证书放置于Android14的系统证书目录/apex/com.android.conscrypt/cacerts

操作步骤

1.首先准备已经成功root后的手机,每个厂家开启root步骤不同。

2.下载Charles应用:https://www.charlesproxy.com/download/latest-release/

3.打开Charles应用下载Charles的根证书。

Chaler Root证书下载位置
Chaler Root证书下载位置
charles证书文件
charles证书文件

4. 对下载的证书进行hash计算,打开电脑终端输入以下命令进行计算,再使用这个hash值对证书文件进行重名,并且文件名后缀为.0

代码语言:txt
复制
openssl x509 -subject_hash_old -in /Users/xxxx/Desktop/charles-ssl-proxying-certificate.pem 
重命名后的证书文件
重命名后的证书文件

5. 尽管拥有root权限还是无法直接将重命名的证书文件放置该目录下/apex/com.android.conscrypt/cacerts。因此通过以下脚本将其临时映射至/apex/com.android.conscrypt/cacerts。每次重启系统时都需要执行该脚本。创建bash脚本文件复制以下代码至脚本中,需要注意第5行代码 cp /data/local/tmp/74f17b3e.0 /system/etc/security/cacerts/中的'74f17b3e.0' 替换为自己证书的命名。

代码语言:sh
复制
mkdir -p -m 700 /data/local/tmp/tmp-ca-copy
 
cp /apex/com.android.conscrypt/cacerts/* /data/local/tmp/tmp-ca-copy/
 
mount -t tmpfs tmpfs /system/etc/security/cacerts
 
mv /data/local/tmp/tmp-ca-copy/* /system/etc/security/cacerts/
 
cp /data/local/tmp/74f17b3e.0 /system/etc/security/cacerts/

 
chown root:root /system/etc/security/cacerts/*
chmod 644 /system/etc/security/cacerts/*
chcon u:object_r:system_file:s0 /system/etc/security/cacerts/*
 
ZYGOTE_PID=$(pidof zygote || true)
ZYGOTE64_PID=$(pidof zygote64 || true)
 
for Z_PID in "$ZYGOTE_PID" "$ZYGOTE64_PID"; do
    if [ -n "$Z_PID" ]; then
        nsenter --mount=/proc/$Z_PID/ns/mnt -- \
            /bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts
    fi
done
 
APP_PIDS=$(
    echo "$ZYGOTE_PID $ZYGOTE64_PID" | \
    xargs -n1 ps -o 'PID' -P | \
    grep -v PID
)
 
for PID in $APP_PIDS; do
    nsenter --mount=/proc/$PID/ns/mnt -- \
        /bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts &
done
wait # Launched in parallel - wait for completion here
 
echo "System certificate injected"

6. 电脑连接手机确保链接成功后,通过push命令将刚才准备好的证书文件及脚本push至手机的/data/local/tmp 目录下。

代码语言:txt
复制
 adb push /Users/XXX/Desktop/74f17b3e.0 /data/local/tmp
 adb push /Users/XXX

7.保持手机链接进入adb shell,修改脚本文件的权限chmod 777 /data/local/tmp/android14_ca.sh

,然后进入/data/local/tmp目录下,使用命令 source android14_ca.sh执行脚本。

8. 确保电脑设备、手机设备联入同一网络,手机设置代理连上Charles,即可抓包成功了。

参考文档:

https://blog.csdn.net/qq_62204036/article/details/142286740

https://httptoolkit.com/blog/android-14-breaks-system-certificate-installation/

https://httptoolkit.com/blog/android-14-install-system-ca-certificate/

https://github.com/httptoolkit/httptoolkit-server/commit/965fd8d9b287af0e4b305d828d5e8e1aa52dce36#diff-dac52b604242b8eaf30a4c3243d0c1edd1cd1a33430d0a5b3c4b0826dba2d86aL280

https://security.stackexchange.com/questions/272686/move-a-user-ca-cert-to-a-trusted-root-cert-in-android-13

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 知识补充
  • 操作步骤
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档