安卓高版本HTTPS抓包:终极解决方案

虽然市面上有好多抓包工具,但是 Android 高版本都需要安装抓包工具的证书到系统目录,才能抓 https 协议的包。本文就以 Charles这个抓包工具来介绍,如何安装证书到 Android 的系统目录,实现 https 抓包。

修改证书名称

启动 Charles,通过菜单栏中的 Help → SSL Proxying → Save Charles Root Certificate... 将 Charles 的证书导出。 使用 OpenSSL 查看证书在 Android 系统中对应的文件名,并重命名证书文件

shell 复制代码
openssl x509 -subject_hash_old -in charles-ssl-proxying-certificate.pem | head -n 1  #cdfb61bc
mv charles-ssl-proxying-certificate.pem cdfb61bc.0

将证书安装到系统证书目录下

使用 adb push 命令将我们的证书文件放到 SD 卡中

shell 复制代码
adb push cdfb61bc.0 /sdcard/Download

使用 adb 连接手机并切换到 root 用户

shell 复制代码
adb shell
su

将证书文件移动到 /system/etc/security/cacerts 目录下,由于 /system 默认是只读的,所以要先重新挂载为其添加写入权限

shell 复制代码
cat /proc/mounts  #查看挂载信息,这里我的 /system 是直接挂载到 / 的

mount -o rw,remount /
mv /sdcard/Download/cdfb61bc.0  /system/etc/security/cacerts
chmod 644 /system/etc/security/cacerts/cdfb61bc.0  #设置文件权限

如果👆的步骤你都能成功,就不用继续往下看了。

终极解决方案

我用我手上的手机都试了一下,用上面的方式安装正式,发现不能成功,一直提示 Read-only file system,但是HttpToolkit这个软件确可以通过 Android Device Via ADB来抓 https 的包。 它是怎么实现的呢? 这下又开始了漫长的谷歌之旅,最后在他们官网找到一篇文章,详细讲述了 通过有root权限的adb 来写入系统证书的神奇方案。

  1. 通过 ADB 将 HTTP Toolkit CA 证书推送到设备上。
  2. 从 /system/etc/security/cacerts/ 中复制所有系统证书到临时目录。
  3. 在 /system/etc/security/cacerts/ 上面挂载一个 tmpfs 内存文件系统。这实际上将一个可写的全新空文件系统放在了 /system 的一小部分上面。 将复制的系统证书移回到该挂载点。
  4. 将 HTTP Toolkit CA 证书也移动到该挂载点。
  5. 更新临时挂载点中所有文件的权限为 644,并将系统文件的 SELinux 标签设置为 system_file,以使其看起来像是合法的 Android 系统文件。

关键点就是挂载一个 内存文件系统, 太有才了。 具体命令如下

shell 复制代码
# 创建一个独立的临时目录,用于存储当前的证书
# 如果不这样做,在我们添加挂载后将无法再读取到当前的证书。
mkdir -m 700 /data/local/tmp/htk-ca-copy
# 复制现有的证书到临时目录
cp /system/etc/security/cacerts/* /data/local/tmp/htk-ca-copy/
# 在系统证书文件夹之上创建内存挂载点
mount -t tmpfs tmpfs /system/etc/security/cacerts
# 将之前复制的证书移回内存挂载点中,确保继续信任这些证书
mv /data/local/tmp/htk-ca-copy/* /system/etc/security/cacerts/
# 将新的证书复制进去,以便我们也信任该证书
cp /data/local/tmp/c88f7ed0.0 /system/etc/security/cacerts/
# 更新权限和SELinux上下文标签,确保一切都和之前一样可读
chown root:root /system/etc/security/cacerts/*
chmod 644 /system/etc/security/cacerts/*
chcon u:object_r:system_file:s0 /system/etc/security/cacerts/*
# 删除临时证书目录
rm -r /data/local/tmp/htk-ca-copy

注意:由于是内存文件系统,所以重启手机后就失效了。可以将以上命令写成 shell 脚本,需要抓包的时候执行下就可以了

本文的目的只有一个就是学习更多的逆向技巧和思路,如果有人利用本文技术去进行非法商业获取利益带来的法律责任都是操作者自己承担,和本文以及作者没关系,本文涉及到的代码项目可以去 爱码者说 知识星球自取,欢迎加入知识星球一起学习探讨技术。关注公众号 爱码者说 及时获取最新推送文章。

相关推荐
晴友读钟3 天前
C#(.NET FrameWork库)逆向基础流程(纯小白教程)
c#·.net·逆向·ctf·reverse·dnspy
CYRUS_STUDIO10 天前
Android下反调试与反反调试
android·安全·逆向
bbqz00720 天前
逆向WeChat(六)
c++·微信·小程序·逆向·mojo·嗅探·抓包https·devtool·sniff
bbqz0071 个月前
逆向WeChat (五)
c++·微信·逆向·mojo·ipc·wechat·mmmojo
smalls2 个月前
xhs x-s参数逆向,2024.8.11更新
逆向
小木_.2 个月前
【Python 逆向滑块】(实战四)逆向滑块,并实现用Python+Node.js 生成滑块、识别滑块、验证滑块、发送短信
node.js·逆向·滑块·网易易盾滑块
小木_.2 个月前
【Python 逆向滑块】(实战五)逆向滑块,并实现用Python+Node.js 生成滑块、识别滑块、验证滑块、发送短信
python·node.js·逆向·js·滑块·网易易盾滑块
写代码的厨子Chance2 个月前
修改PE文件来实现管理员权限
逆向
无 双2 个月前
BUUCTF逆向wp [MRCTF2020]Xor
网络安全·逆向