📌 项目地址Lakr233/vphone-cli | ⭐ 9,495 颗星 | 🔧 Swift | 📜 未标注

📌 项目地址Lakr233/vphone-cli | ⭐ 9,495 颗星 | 🔧 Swift

这个项目解决什么问题

想在电脑上跑 iOS,过去的选项基本只有 Xcode 模拟器——但模拟器不是 iOS,它跑的是 x86/ARM 的 macOS 进程,很多底层行为对不上。

vphone-cli 走了另一条路:用 Apple 自家的 Virtualization.framework,加上 PCC(Private Cloud Compute)研究 VM 的基础设施,在 Apple Silicon Mac 上虚拟出一台运行真实 iOS 固件的 iPhone。流程和给实体机刷机一模一样:下载官方 IPSW、修补引导链、DFU 恢复、安装 CFW、首次启动。宿主机换成了虚拟机,其他都是真的。

这条流水线能成立的前提很苛刻,也解释了为什么这类项目这么少——后面细说。

最快上手

brew install zqxwce/tap/vphone-cli

vphone-cli vm create myphone -V jb        # -V / --variant
vphone-cli vm launch myphone

两条命令,从下载固件到首次启动全部自动完成。vm create 会按顺序执行:下载并合并 IPSW → 修补引导链 → DFU 恢复 → 安装 CFW → 首次启动。

想手动控制每一步?

vm create 跑的是一条固定流水线。如果你想拆开来看、或者只重跑某个阶段,README 给出了完整的手动流程:

vphone-cli vm new myphone                              # 1. 创建空 VM 包
vphone-cli fw prepare myphone --iphone-version 26.1     # 2. 下载 + 合并 IPSW
vphone-cli fw patch myphone --variant jb                # 3. 修补引导链

vphone-cli vm launch myphone --dfu &                    # 4. 进入 DFU(后台)
vphone-cli restore myphone --get-shsh                   #    获取 SHSH
vphone-cli restore myphone                              #    DFU 恢复
vphone-cli vm stop myphone                              #    停止 DFU 引导

vphone-cli cfw install myphone --variant jb             # 5. 安装 CFW(宿主机挂载,需要 sudo)
vphone-cli vm launch myphone                            # 6. 首次启动

注意第 4 步里获取 SHSH 和 DFU 恢复是分开的两个动作——和实体机的降级/保存票据逻辑对应。手动模式还有一个实际用途:升级到新版 iOS 时,给 fw prepare 指定本地 IPSW 即可:

--iphone-source /path/to.ipsw --cloudos-source /path/to.ipsw

管理命令:为批量场景设计

vphone-cli vm list                         # 列出 VM(--json 供脚本使用)
vphone-cli vm info myphone                  # 查看单个 VM
vphone-cli vm config myphone --cpu 8 --memory 8192
vphone-cli vm clone myphone myphone-2       # APFS 快速克隆,生成新设备身份
vphone-cli vm export myphone --out myphone.tzst   # 默认 zstd 快速压缩
vphone-cli vm import myphone.tzst --name restored
vphone-cli vm rename myphone iphone16
vphone-cli vm delete iphone16

有两个设计细节值得说。

clone 走 APFS 克隆,速度很快,而且每个克隆会生成全新的设备身份。也就是说你可以几分钟内复制出一批”互不相同”的 iPhone——做自动化测试、批量验证时这比折腾实体机方便太多。

export 的默认格式是 zstd(快速),加 --max 切换到 xz -9(极限压缩)。--out 可以是目录,会自动命名 .tzst/.txz。导出时会自动跳过恢复目录和临时文件,拿到的是干净的镜像包。

门槛:为什么这不是人人能玩

用之前先对照这几条,一条不满足就跑不起来:

  • 必须 Apple Silicon + macOS 15(Sequoia)以上。Intel Mac 不行,Virtualization.framework 的硬限制。
  • 需要 Xcode 和 iOS SDK,因为要交叉编译 guest daemon(vphoned)。
  • 需要放宽 SIP/AMFI,允许带 PV=3 私有 entitlement 的未签名二进制运行。这一步是主动降低系统安全配置,介意的话到此为止。
  • 依赖不少:python@3.13 aria2 wget gnu-tar openssl@3 ldid-procursus sshpass keystone cmake libusb ipsw zstd

从源码构建的流程:

git clone --recurse-submodules https://github.com/Lakr233/vphone-cli.git

./scripts/setup_tools.sh      # 安装依赖、构建工具链子模块、创建 Python venv
./scripts/build.sh            # 构建并签名 vphone-cli,打包 .app,交叉编译 vphoned

cd .build/vphone-cli.app/Contents/MacOS/
vphone-cli --help

我的看法

iOS 逆向和安全研究一直有个痛点:测试要么用模拟器(行为不真),要么占着几台实体机反复刷机(又慢又伤设备)。vphone-cli 把”刷机”这件事变成了 APFS 克隆加两条命令,单从工程完成度看——完整的 CLI 管理、clone/export/import、--json 脚本接口——这不像一个研究性玩具,是奔着可日常使用的工具做的。

代价也明确:SIP/AMFI 放宽意味着你要在一台专用机器(或者至少专用分区)上跑它。适合有 iOS 安全研究、越狱工具开发、批量自动化测试需求的人;普通开发者用 Xcode 模拟器就够了。

9,495 星说明需求真实存在。如果你符合上面的硬件和环境条件,值得一试。

这篇文章对你有帮助吗?

发表回复