数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 84|回复: 1

[软件] (汇编)分析如何在Apple Silicon Mac强行挂载rootfs读写

[复制链接]
发表于 7 小时前 | 显示全部楼层 |阅读模式
苹果自2020年发布Big Sur时便加入了SSV( Signed System Volume), 来防止修改根目录,但是这对于本人实在不友好,遂研究如何破解


情景:
打开Disk Utility发现,挂载到“/”的是一个名为“com.apple.os.update-xxxxxxx”快照(xxxxx可能是某种随机值,作用我不清楚),不能像在Catalina时使用"sudo mount -uw /"来挂载“/”为rw,说明要做到在macOS启动时挂载rootfs而不是快照。

先关了SIP与根目录保护,即在Recovery运行"csrutil disable" 与 "csrutil authenticated-root disable"

到这时候,网络上有一种挂载后快照的方法,就是将真正的根目录修改后,创建一个snapshot,开机挂载到“/”,但是这样每次修改后都要重新创建快照并重启,极为麻烦。本文通过Patch Kernel来绕过限制。


要想让macOS启动时使用rootfs而不是snapshot,尝试删除快照,删除后启动到了Recovery。
IDA分析kernel cache发现:
1.apfs_vfsop_mount中的select snapshot,用xid找不到snapshot后会进行 csrcheck (1 >> 4) 这一位,这一位在XNU源码中被定义为CSR_ALLOW_APPLE_INTERNAL,应该是苹果内部开发相关的位。检查不通过就重启到Recovery,后续再用apfs_root_snapshot_select来选择快照,找不到会检查是否是Release Build,是则不启动


2. pivot_root切换根目录中,先使用vnode_lookupat将path转换为vnode,又调用VNOP_IOCTL (调用文件系统或设备驱动来执行各种控制操作或请求有关文件的数据,译自苹果文档,具体还有什么用先不管了),调用返回0就vfs_switch_root,就是切换根目录

3.bsd_init里面还有个VNOP_IOCTL,返回非0就用信息”rootvp not authenticated after mounting @%s:%d“来崩溃


好,直接将以上函数patch就行了,我用的Hex Fiend改汇编,把改完后的kernel cache在Recovery里用“kmutil configure-boot -v /Volumes/Macintosh\ HD -c /path/to/your/kernel/cache”来加载,开机之后就可以享用了

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|数码之家-技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2026-6-29 17:23 , Processed in 0.062400 second(s), 6 queries , Gzip On, Redis On.

Powered by Discuz!

© MyDigit.Net Since 2006

快速回复 返回顶部 返回列表