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 积压请求、软件卡死。 ...

2026年3月16日 · 11 分钟 · Xin

如何在 Mac 上搭建 PWN 调试环境

下载并安装 UTM,可以用命令: brew install --cask utm 从 https://releases.ubuntu.com/22.04/ 下载镜像并安装。 然后在 Ubuntu 虚拟机中安装 gdbserver: sudo apt install gdbserver 如果需要调试 32 位可执行文件,还需要执行: sudo dpkg --add-architecture i386 sudo apt update sudo apt install libc6:i386 libncurses5:i386 libstdc++6:i386 环境搭建完成后,在 Ubuntu 虚拟机中运行: gdbserver :1234 ./test 在 Mac 上使用以下命令连接: gdb ./test \ -ex "target extended-remote 192.168.64.13:1234" 记得替换 IP 地址和端口。 在 Mac 上执行: gdb ./pwn101-1644307211706.pwn101 \ -ex "target extended-remote gdbserver.local:1234" \ -ex "set remote exec-file /home/gdb/pwn101-1644307211706.pwn101" \ -ex "break main" 注意:target extended-remote 192.168.64.13:1234 必须是第一条命令,否则不会生效。 你也可以用 pwndbg 来运行调试器。 ...

2025年4月15日 · 2 分钟 · Xin