安卓高版本安装系统证书 HTTPS 抓包 - 终极解决方案

公众号: 奋飞安全
• 阅读 966

一、目标

要抓App的包,首先需要App信任抓包软件的证书。

不过从Android 从 7.0 开始,系统不再信任用户 CA 证书,所以你需要把 CA 证书安装到系统 CA 证书目录。

如果你是用Magisk越狱的话,这个工作就比较简单了,只需要安装一个模块 Move Certificates。

不过今天的故事从我刷了一个新rom开始,这个rom比较奇怪,刷完之后 adb连上 直接就是root状态,但是App却没法获取root状态。

我去,这不就是误打误撞刷了一个隐藏root的rom吗?这下我可舍不得装Magisk了。

那现在的问题就是 如何把证书安装到系统目录?

二、步骤

霸王硬上弓

计算证书名

openssl x509 -subject_hash_old -in charles-ssl-proxying-certificate_saved.pem

算出数值,比如3a1074b3

然后把原Charles证书charles-ssl-proxying-certificate_saved.pem改名为 3a1074b3.0

最后把 3a1074b3.0 文件拷贝到 /system/etc/security/cacerts/ 目录下面。

搞定~~

理想很丰满,现实很骨感,/system 大概率是不可写的,即使你有root权限,也写不进去。

问了下谷哥,哥说,可以把 /system 重新 mount 成可读写的,不过我没有成功。

之前有两种方式成功过。

1、安装RootExplorer.apk,把/system 加载成可读写。

2、adb reboot recovery 进入之前刷的 twrp ,在twrp下去写入 /system

不过这次翻车了,RootExplorer没法加载可读。 twrp写完 /system 之后这个rom发疯了,设置 进不去了,老报崩溃。

师夷长技

想起了 Http Toolkit这个抓包软件,它有个 Android Device via ADB 模式,居然可以顺利抓包。

说明它可以利用ADB把 证书写入到 /system , 毕竟我的ADB是有Root权限的。

太神奇了,它是怎么实现的呢?

这下又开始了漫长的谷歌之旅,最后在他们官网找到一篇文章,详细讲述了 通过有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 系统文件。

关键点就是挂载一个 内存文件系统,太有才了。

Show me the Code

# htk-inject-system-cert.sh
set -e # Fail on error
# Create a separate temp directory, to hold the current certificates
# Without this, when we add the mount we can't read the current certs anymore.
mkdir -m 700 /data/local/tmp/htk-ca-copy
# Copy out the existing certificates
cp /system/etc/security/cacerts/* /data/local/tmp/htk-ca-copy/
# Create the in-memory mount on top of the system certs folder
mount -t tmpfs tmpfs /system/etc/security/cacerts
# Copy the existing certs back into the tmpfs mount, so we keep trusting them
mv /data/local/tmp/htk-ca-copy/* /system/etc/security/cacerts/
# Copy our new cert in, so we trust that too
cp /data/local/tmp/c88f7ed0.0 /system/etc/security/cacerts/
# Update the perms & selinux context labels, so everything is as readable as before
chown root:root /system/etc/security/cacerts/*
chmod 644 /system/etc/security/cacerts/*
chcon u:object_r:system_file:s0 /system/etc/security/cacerts/*
# Delete the temp cert directory & this script itself
rm -r /data/local/tmp/htk-ca-copy
# rm ${injectionScriptPath}
echo "System cert successfully injected"

内存文件系统嘛,重启之后肯定就失效了,所以保存成脚本,抓包之前跑一下,也不是很麻烦的。

三、总结

有时候神奇的技术就是一层窗户纸,捅破了,你会惊叹,原来这么简单。

掌握了新的方案之后,未来就可以举一反三了。

参考 https://httptoolkit.com/blog/intercepting-android-https/

https://github.com/httptoolkit/httptoolkit-server/blob/8a4b4d283fbe98694ddd09a44d6e9c9941aa91e2/src/interceptors/android/adb-commands.ts

安卓高版本安装系统证书 HTTPS 抓包 - 终极解决方案

1:ffshow

着眼总是浮游 观化颇领幻趣

Tip:

: 本文的目的只有一个就是学习更多的逆向技巧和思路,如果有人利用本文技术去进行非法商业获取利益带来的法律责任都是操作者自己承担,和本文以及作者没关系,本文涉及到的代码项目可以去 奋飞的朋友们 知识星球自取,欢迎加入知识星球一起学习探讨技术。有问题可以加我wx: fenfei331 讨论下。

关注微信公众号: 奋飞安全,最新技术干货实时推送

点赞
收藏
评论区
推荐文章
前端尾随者 前端尾随者
2年前
charles 手机证书下载安装
charles手机证书下载安装🌙手机阅读本文目录结构charles手机证书下载安装本文的Charles,适应windows/MAC/IOS/Android,避免抓包HTTPS失败和乱码;用的版本是V4.1.2,其它版本原理类似;charles如果不配置SSL通用证书;会导致HPPTS协议的域名抓取失败/乱码的现象;现在SSL越来越多,很多博客都上了SSL
Wesley13 Wesley13
3年前
java访问Https服务的客户端示例
关于证书1、每个人都可以使用一些证书生成工具为自己的https站点生成证书(比如JDK的keytool),大家称它为“自签名证书”,但是自己生成的证书是不被浏览器承认的,所以浏览器会报安全提示,要求你手动安装证书,提示风险,是否继续等。只有通过权威的CA机构付费获得的证书才能被浏览器承认。2、证书(无客户端服务端之分)保存着IP信息、证书过
Stella981 Stella981
3年前
Charles的app抓包配置和抓包节点为unknown、乱码、手机无法上网等问题的处理
关于手机端抓包配置Charles的一些配置,并且解决,请求存在unknown和内容为乱码的问题   关于请求节点为unknown、内容为乱码和手机端无法访问网络其实都是手机端证书配置问题导致,有的配置后还是存在问题是因为新的ios系统需要Iphone设置关于本机证书信任设置(见2.7),允许操作,具体可以看以下步骤首先你要保证你的手机和电脑是
Stella981 Stella981
3年前
OpenSSL创建生成CA证书、服务器、客户端证书及密钥
使用OpenSSL创建生成CA证书、服务器、客户端证书及密钥目录使用OpenSSL创建生成CA证书、服务器、客户端证书及密钥(一)生成CA证书(二)生成服务器证书(三)生成客户端证书说明:
Stella981 Stella981
3年前
Android 8.1实现静默升级踩过的坑
最近在做Android8.1的系统自动升级app的功能,遇到不少坑,特在这里记录下来。首先,我这个自己做的安卓主板,并且安卓系统是经过root过的。如果你的系统没有root,请移步,这篇文章不适合你!先说需求,我的app会自动从服务器上下载最新版的apk安装包,然后自动安装,app监听了android.intent.action.PACKAGE
Stella981 Stella981
3年前
Linux CA
CA(CertificateAuthority)证书颁发机构主要负责证书的颁发、管理以及归档和吊销。证书内包含了拥有证书者的姓名、地址、电子邮件帐号、公钥、证书有效期、发放证书的CA、CA的数字签名等信息。证书主要有三大功能:加密、签名、身份验证。1.什么是CA认证?CA认证,即CA认证机构,为电子签名相关各方提供真实性、可靠性验证
Wesley13 Wesley13
3年前
Ubuntu18.04 安装 Docker CE
Ubuntu18.04安装DockerCE1.添加使用https传输的软件包和CA证书sudoaptupdatesudoaptinstallapttransporthttpscacertificatescurlsoftwarepropertie
Wesley13 Wesley13
3年前
HTTPS安全通信过程
一、两对公私钥1、CA公私钥:CA公钥:预装在操作系统,内置在浏览器中。备注:微软等公司会根据一些权威安全机构的评估选取一些信誉很好并且通过一定的安全认证的证书发布机构,把这些证书发布机构的证书默认安装在操作系统中,并且设置为操作系统信任的数字证书。CA私钥:由CA机构保管,不会外泄。2、服务公私钥:服
Stella981 Stella981
3年前
Anroid导入Burp证书问题
一些android设备:信任CA证书,一般支持crt格式不支持der格式.所以需要装换证书格式DER转CRT命令opensslx509informDERoutformPEMinburpca.deroutmyca.crt.pem小技巧:开启微型http服务cdmydirpythonmSimpleHTTPSer
Stella981 Stella981
3年前
Kubernetes集群部署之二CA证书制作
创建TLS证书和秘钥kubernetes系统的各组件需要使用TLS证书对通信进行加密,本文档使用CloudFlare的PKI工具集cfssl来生成CertificateAuthority(CA)和其它证书.1\.下载并安装CFSSL:root@k8smaster~cd/usr/local/src
公众号:  奋飞安全
公众号: 奋飞安全
Lv1
奋飞,国家高级信息系统项目管理师,独立安全研究员。 http://91fans.com.cn/
文章
60
粉丝
4
获赞
44