安卓高版本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 脚本,需要抓包的时候执行下就可以了

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

相关推荐
Aresy59618 天前
攻防世界Hello, CTF
笔记·学习·逆向·进制转换
CYRUS_STUDIO20 天前
Android Dex VMP 动态加载加密指令流
android·安全·逆向
打工人你好22 天前
d2j-dex2jar classes.dex 执行报错:not support version 问题解决
逆向
九月镇灵将2 个月前
爬虫逆向学习(十四):分享一下某数通用破解服务开发经验
爬虫·学习·逆向·补环境·vm2
代码敲得好外卖送到老2 个月前
补环境过a_bogus(版本v 1.0.1.19)
爬虫·逆向
A5rZ2 个月前
CTF-RE: STL逆向 [NewStarCTF 2023 公开赛道 STL] WP
网络安全·逆向
雾散睛明2 个月前
逆向学习:crack me之Acid burn.exe
学习·逆向·crack me
A5rZ2 个月前
CTF-RE 从0到N:c语言是如何利用逻辑运算符拆分变量和合并的
网络安全·逆向
bbqz0072 个月前
逆向WeChat(八)
c++·微信·逆向·日志·mars·xlog·日志破解·日志加密·日志解密
zhuqiyua2 个月前
直接调用本地API(NTAPI)
操作系统·windbg·逆向·二进制·osed