macOS AMFI Bypass:ObjC Runtime Swizzle 实战
背景 vphone-cli 能在 Apple Silicon Mac 上启动一个真正的 iOS 26 虚拟机。它不是 Xcode Simulator(那只是把 iOS 应用编译到宿主架构上跑),而是使用了 Apple 私有的 Virtualization.framework PV=3(Platform Version 3)API——与 Apple 为 Private Cloud Compute (PCC) 安全研究搭建的 VM 基础设施完全相同。 在底层,vphone-cli 对 iOS 的整条启动链做了二进制 patch——AVPBooter、iBSS、iBEC、LLB、TXM、kernelcache——绕过签名验证,使自定义固件能在 VM 中启动。越狱变体在启动链和 CFW 安装阶段一共施加了 127 个二进制 patch,可以在客户机内获得完整的 root/SSH/Sileo/TrollStore 环境。 这个项目非常硬核。但它需要 Apple 从不向第三方授予的私有 entitlement: com.apple.private.virtualization com.apple.private.virtualization.security-research 因为该 binary 是用这些私有 entitlement 做 ad-hoc 签名的,amfid 必然会拒绝它。此前的做法需要两步来绕过: csrutil disable 完全关闭 SIP nvram boot-args="amfi_get_out_of_my_way=1" 完全禁用 AMFI 这等于同时拆掉了 macOS 的两道核心安全防线。实际带来的问题: 开发工具链崩坏:JDK 和 Azure Functions Core Tools 在 SIP 关闭后无法正常工作。这两个工具对系统完整性保护有运行时依赖,关闭 SIP 直接导致日常开发流程断裂。 安全性急剧下降:完全关闭 SIP + AMFI 意味着任何进程都可以修改系统文件、注入系统 daemon、绕过文件系统保护、运行任意未签名代码。这在生产开发机上是不可接受的风险。 于是尝试了 amfidont,它通过 debugserver 断点拦截 amfid 的验证逻辑。但 amfidont 基于 Python 实现,实际使用中发现它不够稳定——运行需要签名验证的 binary 时经常出现长时间无响应,断点通信的延迟导致 amfid 积压请求、软件卡死。 ...