Charles原理简述:利用中间人攻击原理,电脑终端/手机终端设备安装Charles的CA证书,并信任其Charles证书。当电脑终端/手机终端设备发送HTTPS请求时使用Charles的CA证书,Charles会截取这个请求,伪装成终端向服务器发送请求。服务端返回的数据,Charles解密后再用自己的证书公钥重新加密数据后发送给客户端。
不同Android版本系统的网络配置变化:
/system/etc/security/cacerts
/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的根证书。
4. 对下载的证书进行hash计算,打开电脑终端输入以下命令进行计算,再使用这个hash值对证书文件进行重名,并且文件名后缀为.0
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' 替换为自己证书的命名。
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 目录下。
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 删除。