一、方针

要抓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"

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

三、总结

有时候奇特的技能便是一层窗户纸,捅破了,你会惊叹,原来这么简略。

把握了新的计划之后,未来就能够触类旁通了。

参考httptoolkit.com/blog/interc…

github.com/httptoolkit…

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

1:ffshow

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

Tip:

: 本文的意图只有一个便是学习更多的逆向技巧和思路,假如有人使用本文技能去进行不合法商业获取利益带来的法律责任都是操作者自己承担,和本文以及作者不要紧,本文涉及到的代码项目能够去奋飞的朋友们常识星球自取,欢迎加入常识星球一起学习探讨技能。有问题能够加我wx:fenfei331评论下。

重视微信大众号: 奋飞安全,最新技能干货实时推送