跳到正文

vphone-cli

在一台实体 Apple Silicon Mac 上用 Apple 的 Virtualization.framework 跑 iOS:有图形窗口、预打过补丁的固件、可克隆的虚拟机,以及可选的本地 HTTP 与 WebSocket 自动化接口。

这是 Lakr233 的 GitHub 头像,不是项目自己的 logo。取自 github.com,2026-10-02。

Screenshot of vphone-cli
编辑截图, 2 Oct 2026vphone-cli ↗

这是什么

vphone-cli 用 Apple 的 Virtualization.framework 与 PCC 研究用虚拟机,在一台实体 Apple Silicon Mac 上启动 iOS,供安全研究、逆向工程与调试使用。它给这台虚拟设备一个真正的窗口——可以浏览应用与文件、截图与录屏——固件预打过补丁并支持安装包环境,虚拟机可导出、导入与克隆,另有一个可选的本地 HTTP 与 WebSocket 接口用于自动化。运行时不需要 Xcode、Python 或 Homebrew。

谁做的仓库的 743 次提交来自一条很长的尾部分布,最前面是维护者——Lakr 434 次、Lakr233 41 次——其后是 zqxwce 125 次、Maximilian Paß 23 次、TastyHeadphones 16 次、xiahouzhen 9 次,再往下还有约三十位贡献者。文档提供英文、中文、日文与韩文四种。

它是怎么搭起来的

组成 · 4

项目是 Apple 自家虚拟化栈上的一层薄命令界面,不寻常的部分在于「让一台研究用客户机启动并保持可用」需要什么。困难都在界面之下:固件要联网取签名票据才能恢复、虚拟机要能被创建、克隆与恢复、宿主必须被明确告知允许研究用客户机。在这之上是一个 CLI、一个启动器窗口,以及一个可选的本地 API,用来由别的程序驱动这台设备。

VPhoneExecutable/VPhoneCommand
命令界面——325 个文件、3.98 MB,是仓库最大的一块——覆盖虚拟机生命周期、固件,以及 README 列出的各项操作。
VPhoneVirtualization
112 个文件、1.51 MB 的虚拟化代码:通过 Apple 的 Virtualization.framework 与 PCC 研究用虚拟机运行客户机的层,也是宿主需求的来源。
VPhoneLaunchpad
51 个文件:图形窗口,以公证过的压缩包分发——读者不必敲命令就能使用这台虚拟设备的方式。
自动化 API
一个可选的本地 HTTP 与 WebSocket 接口,让这台虚拟 iPhone 能被另一个程序驱动而不是靠手点——这是它作为研究夹具可用的那部分。

取舍,以及它替代了什么

  • 要求实体 Apple Silicon Mac,并明确不支持 macOS 虚拟机 替代 支持嵌套虚拟化

    需求一节把它写成硬限制而不是注意事项,这样工具其余部分才能假定走的是 Apple 自己的虚拟化路径。

  • 请宿主放宽调试限制,但保留 SIP 替代 要求整体关闭保护

    README 指定 csrutil enable --without debug 加 allow-research-guests enable,并说明其含义——SIP 仍然开启,只放宽了调试相关限制。

  • 除 CLI 与窗口之外再提供 HTTP 与 WebSocket API 替代 只做手动操作的工具

    它被列为可选的自动化接口,而安全研究与逆向工程的工作流正需要这个才能复现。

依据Lakr233/vphone-cli 的 README、Documents/ 与仓库文件树,2026-10-02 读取。

制作过程

4 个阶段
  1. 01

    七个月、743 次提交、330 条共同作者尾注

    仓库创建于 2026-02-26,至今仍在推送。743 次提交分布在之后每个月,其中两个高峰是三月(207 次)与九月(353 次)。330 次提交带共同作者尾注,除十来次外全部署名 Claude 模型:Opus 5.5 109 次、Opus 5 64 次、Opus 4.8 39 次、Fable 5 35 次、Opus 5(1M 上下文)24 次、Opus 5.5(1M 上下文)13 次、Opus 4.7 8 次、Opus 4.6(1M 上下文)5 次、Opus 4.8(1M 上下文)4 次、Sonnet 5.5 4 次、Opus 4.6 3 次、Sonnet 4.6 2 次,以及 Claude Code 一次。署名人的尾注有十条,多数是贡献者而不是维护者。

  2. 02

    难的是宿主,README 把它放在最前面

    需求一节写的是诚实的限制:一台实体 Apple Silicon Mac、macOS 15 或更新,并且在 macOS 虚拟机里不可用;每台虚拟机一个 64 GB 虚拟磁盘,固件还要另算;需要联网,因为恢复系统时要在线获取签名票据。动手之前要先改两处宿主设置——进恢复模式执行 csrutil enable --without debug 与 csrutil allow-research-guests enable——README 直接写明这意味着什么、不意味着什么:SIP 仍然开启,只放宽了调试相关限制。

  3. 03

    这台虚拟设备能做的五件事

    功能列表很短,每一条都是能力而不是形容:一个显示虚拟 iPhone 屏幕的图形窗口,可截图、可录屏;自带预打过补丁的固件,并允许安装包环境;备份与克隆,虚拟机可导出、导入、复制;一个可选的本地 HTTP 与 WebSocket 自动化接口;以及「没有额外依赖」——README 用「运行时不需要什么」来表述,即不需要 Xcode、Python 与 Homebrew。分发方式是 release 页面上的公证过的 launchpad 压缩包,README 也注明并非每个 release 都做过公证,以及怎么挑到公证过的那个。

  4. 04

    代码实际在哪里

    仓库共 845 个文件,而且分布集中:VPhoneExecutable/VPhoneCommand 占 325 个文件、3.98 MB,VPhoneVirtualization 占 112 个文件、1.51 MB,VPhoneLaunchpad 占 51 个文件。这个切分与它必须做的三件事对应——命令行界面、与 Apple 框架打交道的虚拟化层、把两者包起来的启动器应用——也正是这类工具应有的形状:难点在平台,不在界面。

相关档案

全部档案 →