likes
comments
collection
share

安卓逆向|高版本安卓(7.0+)用 Fiddler 无法抓到 HTTPS 包问题解决方案

作者站长头像
站长
· 阅读数 59

声明:本文仅供学习交流用途,切勿用于非法行为,否则由此产生的一切后果均与作者本人无关。未经授权禁止转载本文。如有侵权,请及时通过本人公众号「逆向扬」联系删除。

问题描述

刚开始学习安卓逆向的小伙伴肯定都迫不及待得准备了一台真机想要试一下抓包。

给手机刷完 root 后,按照网上的教程给手机安装了 Fiddler 的证书,对于一些简单的 demo 安卓应用,确实可以抓到 https 的包。

但是事情并没有那么顺利。假如你是安卓 7 或者更高版本的话,当你换了其他 app 时,可能会发现抓不到它们的 https 包。

我就是遇到了这种情况。于是上网查阅资料(建议大家先读一下这篇博客),了解到是因为安卓系统从 7 版本开始升级了安全策略,一些 app 可以不认用户证书目录下的证书,而只认系统证书目录下的。

要解决这个问题,我们需要将 Fiddler 的证书刷入到手机的“系统证书”中才能正常抓到 https 包。

在将 Fiddler 证书刷入我手机“系统证书”的过程中不是很顺利,前后花了一个礼拜时间、查了不少博客才成功刷进去,期间也踩了些坑。

为了记录,也为了大家遇到这个问题时能够有一个有效的参考资料,就有了这篇博客。

如果大家觉得有帮助的话,可以点个赞加个关注,或者私信我交流,感谢大家的支持。

下面进入正文。

手机型号配置

我这台用来玩逆向的手机配置如下:

  • 手机型号是红米 Note 9 5G 版,从二手网站淘来的,95 新
  • 操作系统用的是 miui 12.0.9 版本,安卓 10 系统

解决方案

我把我成功刷入 Fiddler 证书到系统证书的整个过程都总结在这里,包括刚拿到手机后如何 root 的,大家可以参考着按照自己的实际机型来操作。

刷 root

在拿到淘来的安卓机后,先是给手机刷 root。当时我看的是这个教程。按照这个教程刷完 root 后,还需要安装两个 magisk 的模块:RiruLSPosed,但由于下载的是 magisk 25.2 版本,因为一些原因,这个版本的 magisk 已经去掉模块在线下载这个功能了,因此我就从这两个模块的官方 github 仓库里下载,然后本地安装了下。

如果不知道如何本地安装,大家可以查一下相关博客,或者私信找我也行。

刷完 root,安装完两个模块后,Magisk 界面如下图。需要注意的是,下面图二中模块仓库中的 ADB Root 这个模块在后面很重要,后面我会告诉大家如何安装,在这里大家注意一下这个模块就行:

安卓逆向|高版本安卓(7.0+)用 Fiddler 无法抓到 HTTPS 包问题解决方案 安卓逆向|高版本安卓(7.0+)用 Fiddler 无法抓到 HTTPS 包问题解决方案

将 Fiddler 证书刷入手机的系统证书

刷完 root 以后,我们就要开始将 Fiddler 证书刷入到系统证书中了。

到这一步,我们需要熟悉下 adb 这个工具。网上关于 adb 的使用教程很多,我就不介绍了。如果有需要推荐教程的小伙伴可以翻一下文章最下面参考资料小节中 adb 相关的资料。

下面开始讲解具体步骤。

第一步

从 Fiddler 下载 Fiddler 证书到电脑本地,并用 openssl 转换。这一步可以参考这篇博客的导出 FD 证书小节和用 openssl 转换证书的小节,我就不介绍了。

第二步

手机连接电脑,准备刷入证书。

首先打开终端运行:

adb devices

查看 adb 是否能识别到你的手机,

安卓逆向|高版本安卓(7.0+)用 Fiddler 无法抓到 HTTPS 包问题解决方案

如果手机连接了电脑,但是用这个命令显示没有识别到任何设备的话,记得确认一下手机开发者选项中的 USB 调试功能有没有打开,想要开启这个选项 adb 才能识别到你的设备。

安卓逆向|高版本安卓(7.0+)用 Fiddler 无法抓到 HTTPS 包问题解决方案

能够成功识别到后,我们运行下面的命令,将电脑上转换好的证书推送到手机系统证书目录下:

adb push [文件名] /system/etc/security/cacerts

注意:文件名这个位置记得用转换后的证书文件的绝对路径。

但我这边当时报了这个错:Read-only file system

安卓逆向|高版本安卓(7.0+)用 Fiddler 无法抓到 HTTPS 包问题解决方案

大意是无法在只读文件系统中创建文件,说白了就是没有写权限。

遇到这个问题,我们运行这篇 Stack Overflow 的回答中提到的命令重新挂载下:

adb shell mount -o rw,remount /

在这之前记得在 magisk 中允许给予 adb shell 工具使用 root 权限,也就是打开下面的[SharedUID] Shell 选项:

安卓逆向|高版本安卓(7.0+)用 Fiddler 无法抓到 HTTPS 包问题解决方案

但是,如果要成功运行这个命令,你必须要确保让 adb 以 root 运行,也就是先执行下面的这个命令,否则会无法执行成功:

adb root

我当时执行这个命令时,报如下错:adb cannot run as root in production builds

安卓逆向|高版本安卓(7.0+)用 Fiddler 无法抓到 HTTPS 包问题解决方案

这个问题当时卡了我一段时间,当时查博客,一些博客说是要安装一个叫 adb-insecure 的 magisk 模块,当时我也装过,但由于这个模块只适用于一些老版本的安卓,因此也没成功。

还有一些博客说可以通过安装一个叫 MagiskHidePropsConf 的 magisk 模块,修改 ro.debuggable 和 ro.secure 的值来解决这个问题,但也没什么用,结果还因为修改了 ro.secure 的值导致无法进入手机的开发者选项,不得不把手机系统重刷。

那最终我是怎么解决的呢,就是这篇 Stack Overflow 上的回答。里面提到了一个 magisk 模块,名叫 ADB Root,也就是上文我提醒大家注意的那个模块。这个模块就是临时让手机上的 adbd 进程以 root 方式启动:

安卓逆向|高版本安卓(7.0+)用 Fiddler 无法抓到 HTTPS 包问题解决方案

安装这个模块以后,重启手机,再次在终端输入:

adb root

可以看到 adb 已经进入 root:

安卓逆向|高版本安卓(7.0+)用 Fiddler 无法抓到 HTTPS 包问题解决方案

然后运行下面命令就可以执行成功:

adb shell mount -o rw,remount /

不明白这句命令在做什么的伙伴们,来看看 ChatGPT 的解释:

“这句 adb 命令的作用是将 Android 设备的根文件系统以读写方式重新挂载。其中,adb shell 表示在设备的命令行终端中执行后续命令;mount 是 Linux 系统中的一个命令,用于挂载文件系统;-o rw,remount 表示将原本以只读方式挂载的文件系统重新挂载为可读写的方式;/ 表示需要重新挂载的文件系统目录,这里指的是根文件系统。”

该命令通常用于需要修改系统文件或者进行系统级操作的情况,因为 Android 设备默认情况下会将根文件系统挂载为只读的方式来保护系统的安全和稳定性。通过重新挂载为读写方式,就可以对其进行修改和操作。但是需要注意的是,修改系统文件可能会导致设备出现问题或不可逆转的风险,请谨慎操作并备份重要数据。

之后我们继续 push 我们的证书:

adb push [文件名] /system/etc/security/cacerts

如果显示下面这个结果的话,说明刷入成功了:

安卓逆向|高版本安卓(7.0+)用 Fiddler 无法抓到 HTTPS 包问题解决方案

但可能会遇到这样一个问题:No space left on device

安卓逆向|高版本安卓(7.0+)用 Fiddler 无法抓到 HTTPS 包问题解决方案

这个问题是说我们要刷入证书的这个目录空间已经满了,刷入不了。我们可以通过 adb shell df 命令来查看这个 system 目录的空间剩余情况:

adb shell df system/

执行结果如下,可以看到 Use% 的值为 100%,但是 Available 不为 0,照这么说应该可以刷入,就很奇怪:

安卓逆向|高版本安卓(7.0+)用 Fiddler 无法抓到 HTTPS 包问题解决方案

这个问题的解决方案可以在这篇博客中找到,说白了就是给 system 目录腾出空间,把里面的一些很明显不会用到的文件删除掉。

对于我这台红米机,我就直接rm -r [文件]删除了 /system/app目录下的 Mipay/,看名字是和小米支付相关的,心想也用不到,就直接删了:

rm -r Mipay/
安卓逆向|高版本安卓(7.0+)用 Fiddler 无法抓到 HTTPS 包问题解决方案 安卓逆向|高版本安卓(7.0+)用 Fiddler 无法抓到 HTTPS 包问题解决方案

然后再重新将手机和电脑连接(拔掉手机和电脑连接的数据线,再插回去),再次运行 push 命令就可以成功了。如果还是不行可以把手机和电脑重连这个动作多试几次,顺便把手机后台开着的应用也释放一下。

将证书刷到系统证书中后,我们再修改一下我们刷入的这个证书文件的读写权限,然后重启手机即可:

adb shell 
cd /system/etc/security/cacerts
chmod 777 [文件名].0 

重启手机后,用 Fiddler 即可抓到之前抓不到的数据包,比如这个某联合伙人 app 的登录接口 HTTPS 数据包:

安卓逆向|高版本安卓(7.0+)用 Fiddler 无法抓到 HTTPS 包问题解决方案

最后

到这里在安卓 7.0+ 系统中刷入 Fiddler 证书的讲解就结束了,整个过程还是学到了不少东西的。如果当初直接找某宝帮忙刷 root 或者直接买一台刷好 root 后的手机的话,也不会学到这么多。希望这篇文章能够对大家有帮助,能够节省大家时间。如果仍然遇到什么问题,欢迎在评论区留言,或者私信我交流,大家一起进步!

参考资料

转载自:https://juejin.cn/post/7215842530839298108
评论
请登录