darwin-vm:在 QEMU 中虚拟 iPhone 与 Apple Silicon Mac 的开源黑科技

> 一个基于 QEMU 的 macOS/iOS 虚拟机启动器,支持虚拟 iPhone 17 至 12 及 M5-M1 系 Apple Silicon Mac。 --- ## 一、项目速览:它到底是什么? **darwin-vm** 是一个用 Python 编写的命令行工具,本质上是一个 QEMU 的封装器(wrapper)。它允许你在 x86_64 或 ARM64 的 Linux 主机上,通过 QEMU 模拟器直接启动 **未修改的** iOS(iPhone 12-17 全系)和 macOS(M1-M5 芯片的 Apple Silicon Mac)的磁盘镜像。 它不是一个操作系统,也不是一个模拟器本身——它是一套经过精心调校的启动脚本和配置集合,解决了 QEMU 直接启动 Darwin 内核(Apple 操作系统的基础)时遇到的大量硬件兼容性问题。项目目前约 353 星,由开发者 jprx 维护,语言为 Python,但核心逻辑涉及 QEMU 参数生成、AArch64 固件处理以及 Darwin 内核引导流程。 --- ## 二、它解决什么痛点? ### 2.1 官方虚拟化的封闭性 Apple 的虚拟化框架(Virtualization.framework)只允许在 Apple 硬件上运行 macOS,且对 iOS 模拟器有严格限制。想在普通 PC(Linux 或 Windows)上体验 iOS 或 Apple Silicon macOS,过去几乎不可能。 ### 2.2 QEMU 原生支持的复杂性 QEMU 本身确实支持 `qemu-system-aarch64`,可以模拟 ARM 架构。但 Darwin 内核(包括 XNU 和 iOS 的 XNU 变体)对设备树、中断控制器(Apple AIC)、PCIe 拓扑、以及特定的固件接口(iBoot)有极其苛刻的要求。直接使用 QEMU 默认参数启动 macOS 镜像,通常会卡在早期引导阶段,黑屏或 panic。 ### 2.3 已有方案(如 OSX-KVM)的局限 知名的 OSX-KVM 项目主要针对 Intel 版 macOS(x86_64),对 Apple Silicon 的 macOS 支持很弱。而像 `docker-OSX` 这类项目依赖 KVM 和特定内核补丁,对内存和 CPU 限制多。darwin-vm 则专注于 **ARM64 的 Darwin 内核**,直接面向 Apple 自研芯片的镜像。 --- ## 三、快速上手:安装与使用 ### 3.1 环境要求 - **主机系统**:Linux(推荐 Ubuntu 22.04+ 或 Debian 12),需要 KVM 支持(`/dev/kvm` 存在)。 - **CPU**:x86_64 或 ARM64 均可,但 ARM64 主机性能会更好(因为不需要跨架构翻译)。 - **内存**:至少 8GB,推荐 16GB+(因为要同时运行 QEMU 和 macOS 镜像)。 - **磁盘**:至少 30GB 空闲空间(用于存放镜像)。 ### 3.2 安装步骤 bash # 1. 克隆仓库 git clone https://github.com/jprx/darwin-vm.git cd darwin-vm # 2. 安装依赖(Debian/Ubuntu) sudo apt update sudo apt install -y python3-pip qemu-system-arm qemu-utils unzip pip3 install -r requirements.txt # 3. 准备 iOS/macOS 镜像 # 你需要自己获取 IPSW 文件(iOS 固件)或 Apple Silicon macOS 的恢复模式镜像。 # 项目提供了 download_ipsw.py 脚本,但需要 Apple 开发者账号(免费即可)。 # 或者手动下载合适的 IPSW 文件,放到 ./images/ 目录。 ### 3.3 启动虚拟 iPhone 17 bash # 列出可用设备 darwin-vm list # 启动 iPhone 17 模拟(需要已下载对应 IPSW) darwin-vm run --device iphone17 --ipsw ./images/iPhone17_17.0_21A329.ipsw 启动后,QEMU 窗口会显示苹果 Logo,然后进入 iOS 的恢复模式或正常启动(取决于 IPSW 是否包含完整文件系统)。**注意**:由于没有 GPU 直通,UI 会非常卡顿,但系统能启动到 SpringBoard(主屏幕)。 ### 3.4 启动 macOS(Apple Silicon) bash # 下载 macOS Sonoma 的 IPSW(Apple Silicon 恢复镜像) darwin-vm run --device mac-m1 --ipsw ./images/macOS14.6_23G80.ipsw 同样,启动后你会看到 macOS 的恢复模式界面,可以进入磁盘工具或安装器。 ### 3.5 自定义参数 bash darwin-vm run --device iphone15 --ipsw ./images/xxx.ipsw --ram 4096 --cores 4 --display 1024x768 --- ## 四、核心亮点深度解析 ### 4.1 设备树与固件自动适配 darwin-vm 的最大技术亮点在于它内置了 **针对每款 iPhone/Mac 型号的 QEMU 设备树(DeviceTree)补丁**。iPhone 的引导加载器 iBoot 会读取设备树中的硬件信息,如果设备树中声明的中断控制器、时钟控制器、内存映射与真实硬件不符,内核直接 panic。darwin-vm 通过生成精确匹配的 DTB(设备树块),让 iBoot 误以为自己在真实硬件上启动。 ### 4.2 支持最新芯片型号 项目描述中明确支持从 M1 到 M5 的 Apple Silicon 芯片。这意味着它已经适配了 QEMU 中较新的 `virt` 机器类型,并针对 Apple 的 `AIC`(Apple Interrupt Controller)和 `DART`(Device Address Resolution Table)做了特殊处理。这些是其他 QEMU 教程中极少涉及的。 ### 4.3 纯 Python 实现,易扩展 所有配置都以 Python 字典形式保存在 `devices.py` 中。如果你想添加一个新的 iPhone 型号,只需复制一个现有配置,修改内存大小、CPU 核心数、设备树文件名即可。不需要修改任何 C 代码或 QEMU 源码。 ### 4.4 自动下载与校验 darwin-vm 附带 IPSW 下载脚本,支持从 Apple 的 CDN 直接拉取固件,并验证 SHA256 哈希,避免损坏的镜像导致启动失败。 --- ## 五、适用场景与限制 ### 5.1 适用场景 - **安全研究**:分析 iOS/macOS 内核漏洞,在受控环境中运行恶意代码而不影响真实设备。 - **逆向工程**:提取 iOS 系统文件,分析 dyld 共享缓存,调试系统进程。 - **CI/CD 测试**:在没有 Mac 硬件的 Linux 服务器上,跑一些基础的 UI 自动化测试(虽然慢,但可行)。 - **好奇心驱动**:纯粹想在 PC 上看看 iOS 17 长什么样。 ### 5.2 明确限制 - **性能极差**:没有 GPU 加速(无 virtio-gpu 或 Apple Paravirt GPU),UI 渲染完全依赖 CPU 软件模拟,帧率可能只有 1-5 FPS。 - **无触摸/传感器**:触摸屏、加速度计、摄像头等外设完全不可用。 - **无网络桥接**:QEMU 默认的用户模式网络(SLIRP)可以访问外网,但无法与主机局域网直接互通。 - **无法运行 App Store 应用**:虽然能启动到主屏幕,但因为没有苹果的签名服务,无法安装付费应用(免费应用有时可以)。 --- ## 六、同类项目对比 | 项目 | 支持的镜像 | 架构 | 易用性 | 性能 | 维护状态 | |------|-----------|------|--------|------|----------| | **darwin-vm** | iOS 12-17, macOS M1-M5 | ARM64 | 高(一条命令) | 低 | 活跃(2024-2025 更新) | | **OSX-KVM** | macOS 10.14 - 14 (Intel) | x86_64 | 中(需手动配置) | 中(有 GPU 直通选项) | 活跃 | | **docker-OSX** | macOS Catalina - Sonoma (Intel) | x86_64 | 高(Docker) | 中 | 较活跃 | | **QEMU 原生** | 理论上支持 | 两者 | 极低(需自行调参) | 低 | - | **darwin-vm 的独特优势**:它是唯一一个专注于 **Apple Silicon 版 macOS** 和 **iOS 全系列** 的 QEMU 封装器。OSX-KVM 和 docker-OSX 都只支持 Intel 版 macOS。如果你手里只有 Apple Silicon 的 IPSW 镜像,darwin-vm 几乎是唯一选择。 --- ## 七、技术评测总结 darwin-vm 是一个极具极客精神的项目,它用 Python 脚本把 QEMU 的复杂参数封装成几行命令,让普通人也能在 Linux 上启动 iPhone 和 Apple Silicon Mac 的镜像。虽然性能惨不忍睹,但作为研究工具和教学演示,它价值巨大。 **适合人群**:iOS 安全研究员、系统爱好者、虚拟机折腾家。 **不适合人群**:希望流畅使用 iOS 应用或 macOS 做日常工作的用户。 如果你能忍受 5 FPS 的动画,并愿意花时间下载 6GB 的 IPSW 文件,那么 darwin-vm 会很值得你折腾。 --- **项目地址**: [https://github.com/jprx/darwin-vm](https://github.com/jprx/darwin-vm)
查看工具