5 分钟开出第一台虚拟 iPhone:vphone-cli 零基础上手实录

📅 发布时间:2026/10/10 22:14:47
5 分钟开出第一台虚拟 iPhone:vphone-cli 零基础上手实录
5 分钟开出第一台虚拟 iPhonevphone-cli 零基础上手实录【免费下载链接】vphone-cli项目地址: https://gitcode.com/GitHub_Trending/vp/vphone-cli在 Mac 上跑一台 iPhone这件事曾经只属于安全研究圈子的定制化玩具要么依赖昂贵的云端设备要么需要在一堆晦涩的固件脚本里折腾。vphone-cli 的出现把这个门槛压到了一个普通命令行用户也能接受的程度——它基于 Apple 官方的 Virtualization.framework 与 PCC 研究虚拟机Research VM跑的是真实的 iOS 系统自带越狱环境可以用于安全研究、逆向调试、自动化测试甚至是给 AI Agent 提供可编程的移动端操作接口。社区里关于黑灰产利用 iOS 虚拟化搞云手机农场的讨论、以及Mac 上跑一台能被 AI 操作的虚拟 iPhone的实践文章都指向同一个事实这套技术路径已经从实验室走向了可复现的开源工程。本文不打算铺开讲补丁与内核只做一件事把从零到出现一台可操作的虚拟 iPhone 的完整路径用仓库里的真实文档与源码逐步拆给你看并在最后给出第一次启动前的验证清单。开始之前先说明一个事实边界5 分钟指的是下载解压、授权、安装核心 Bundle、点击新建这一整套操作的步骤节奏首次建机需要下载 IPSW、在线恢复签名票据并打补丁耗时取决于网络与磁盘而第二次起得益于模板机制创建一台新机器可以压缩到秒级。一、门槛先看清楚环境要求先读仓库根目录的 README.md它把硬性条件写得很克制必须是物理 Apple Silicon Mac且运行 macOS 15 或更新版本。PV3 研究型访客不能在嵌套的 macOS 虚拟机里运行README 原话是 It does not work in a macOS VM。磁盘空间每台 VM 默认 64 GB 虚拟磁盘固件还要再占一些。这是一个容易在第一步就被忽略的隐性门槛。网络连接恢复系统需要在线获取签名票据signing ticket。调整安全设置需要进入 macOS Recovery 执行两条命令后重启。安全设置这条很多新手会在这里卡住。README 推荐的是保留 SIP的温和路径csrutil enable --without debug csrutil allow-research-guests enable注意这两条命令要在 Recovery 模式的终端里执行。它只是放宽了调试相关的限制SIP 本身仍然开启。完整的两级安全策略在 host-setup.md 中有详细说明——你可以选择彻底关闭 SIP路径 A还要设置amfi_get_out_of_my_way1引导参数也可以保留 SIP 只放宽调试限制然后用随包附带的vphone-escalator对签名后的vphone-vm二进制做 AMFI 白名单路径 B。绝大多数普通用户走路径 B 就够了。另一个容易踩的坑是宿主本身的环境校验。打开 VPhoneHostPreflight.swift 可以看到host preflight启动时会先执行let probe try VPhoneProcessRunner.runCapturing( URL(fileURLWithPath: /usr/sbin/sysctl), [-n, kern.hv_vmm_present], ) if probe.succeeded, probe.stdout.trimmingCharacters(in: .whitespacesAndNewlines) 1 { throw ValidationError(This Mac is running inside a VM, so vphone-vm cannot start a guest. ...) }也就是说如果你的 Mac 本身就是一台虚拟机云 Mac、嵌套虚拟化kern.hv_vmm_present会直接拒绝启动报 Virtualization is not available on this hardware。这不是安装问题是硬性环境不符。顺带一提distributed 的.bundle运行时不需要 Xcode、Python 或 Homebrew这是它面向零基础用户的重要底气。二、下载与解压认准-notarized后缀项目发布的下载物在 Documents/Downloads/README.md 里讲得很清楚每次 release 最多有三个文件文件内容vphone-launchpad-version-notarized.zipLaunchpadApple 签名并公证能直接下载的就选它vphone-launchpad-version.zipLaunchpad未公证首次打开会被 macOS 拦截VPhone-version.zipVPhone.bundleLaunchpad 会自动下载安装无需手动处理不是每个版本都做了公证。比如 2.0 系列只有 2.0.4、2.0.5、2.0.6、2.0.8、2.0.9 是公证版没有 2.0.72.1 系列混有公证与非公证版本而 2.2 到 2.9 各系列的主版本基本都公证了。所以拿到手的第一件事去 release 页面确认存在-notarized文件而不是随手下载最新 tag。如果最新版没有公证产物就从 Downloads 文档里挑一个公证版。下载后解压、打开 Launchpad这是整个流程中第一个图形入口。注意这里有个架构概念值得建立Launchpad 只是前端管理界面跑虚拟机这件事发生在它管理的VPhone.bundle里。社区里解压后没出现 iPhone的排查文章核心结论之一就是核心 Bundle 与图形入口分离——解压出 Launchpad 不等于有了虚拟 iPhone还需要下一步安装 VPhone.bundle。三、Host Setup开发者工具授权与 Helper 安装打开 Launchpad 后第一步是Host Setup授予 Developer Tools 访问权限并安装 helperSMJobBless 特权辅助进程。这一步的背后是 host-setup.md 描述的双二进制架构vphone-cli是无私有 entitlement的编排入口真正干活的vphone-vm是携带 Apple 私有虚拟化 entitlement 的签名 GUI/VM 进程。AMFI 可能拒绝未白名单的vphone-vm——此时vphone-cli host preflight会打印出完整的sudo .../vphone-escalator allow .../vphone-vm命令按提示执行即可。在 Launchpad 内部Bundle 的检查分两步执行策略异常Execution Policy exception加上host preflight复核。每次安装新版本、每次重新构建签名都需要重新执行allow。这条验证命令值得记住vphone-cli host preflight输出Host preflight passed: vphone-vm can launch才算通过第一关。四、Core Bundle安装 VPhone.bundle进入Core Bundle页面点击Download and Install。Launchpad 会从 GitHub release 拉取VPhone.bundle安装流水线在 VPhoneLaunchpadCoreBundle.swift 里写得明明白白每一步都有状态跟踪prepare → download → verify(SHA-256) → install(管理员权限) → policy(执行策略) → preflight(宿主预检)下载过程边流式写文件边计算 SHA-256见 VPhoneLaunchpadDownload.swift1 MB 缓冲分块哈希校验失败直接拒绝安装防止下载被篡改。版本匹配规则也在这份文档里Launchpad 与 VPhone.bundle 必须属于同一个系列——系列指版本号前两位例如 Launchpad 2.2.3 属于 2.2配任意 2.2.x 的 VPhone.bundle。同系列内装最新补丁版本。Launchpad 会拒绝过旧的 Bundle但它不会自动升级自己升级 Launchpad 需要手动替换 App。五、New Machine选择固件配对完成创建这是开出第一台虚拟 iPhone的核心步骤。在Machines页面点击New Machine填名字、选位置然后会看到固件配对选择。整个建机流程在 create-and-run.md 里有完整定义一条命令的完整形态是vphone-cli host preflight vphone-cli vm create myphone \ --iphone-source /path/to/iPhone17,3_Restore.ipsw \ --cloudos-source /path/to/cloudOS.ipsw注意它需要两个 IPSWiPhone 恢复固件 兼容的 PCC/cloudOS 固件。为什么会需要两个因为整个方案是混合恢复先用 cloudOS 恢复出一个临时 VM 抽取 GPU 驱动再执行真正的混合 iPhone 恢复。GPU 驱动按 cloudOS 版本缓存在~/.vphone/gpu-drivers/所以同一 cloudOS 的第二台机器可以跳过临时恢复。固件配对必须查兼容表。compatibility.md 给出了实际验证过的组合最稳妥的两组是iPhone 恢复 IPSWPCC/cloudOS IPSW验证结果17,3_26.6.2_23G9026.4-23E5207q打补丁、恢复、CFW、启动、vphoned ping 均通过17,3_27.0_24A43526.4-23E5207q同上全部通过关键知识点cloudOS 26.4 测试版26.4-23E5207q是目前唯一同时包含vphone600ap身份访客的内核、SEP、设备树来源的镜像。26.4 之后的 cloudOS 都只列了 PCC 板卡和vresearch101ap没有vphone600系列组件一个都引导不了。这也是为什么新手如果手滑选了新版 cloudOS会在fw prepare阶段直接被拒。不确定时用vphone-cli fw catalog查当前目录。默认参数是 8 核 CPU、8192 MB 内存、64 GB 磁盘见 VPhoneVirtualMachineCreateCommand.swift网络模式 NAT。整条流水线为prepare固件准备→ firmware patch补丁→ online DFU restore在线恢复→ CFW install挂载安装自定义固件→ first boot首次引导验证CFW 安装环节需要 root 权限。而在 2.9 系列vm create默认还会多一层模板机制第一次建机时完整跑一遍流水线并把结果冻结成模板之后相同固件、相同参数的vm create直接从模板克隆——克隆加首次引导检查只需几秒不需要 root不需要再下载 IPSW。这就是文章标题里5 分钟开出第二台、第三台的实际支撑。六、第一次启动的验证清单建机成功的标志在 create-and-run.md 里写得很明确流水线末尾会看到两行First boot: vphoned ping succeeded JB VM created; vphoned connected但此刻你面前并不会有一个运行中的窗口——这是新手最容易误解的一点创建流程里的首次引导是一次临时 GUI 验证启动vphoned 守护进程应答后验证用 VM 会被自动停止。所以建机完成≠GUI 正在运行要正式使用还得手动启动vphone-cli vm list # 查看机器与运行状态 vphone-cli vm launch myphone # 启动出现 VM 窗口并持续运行 vphone-cli vm stop myphone # 从另一个终端停止对应的启动逻辑在 VPhoneVirtualMachineLaunchCommand.swiftvm launch会先执行 host preflight 再启动并把访客串口控制台接到终端。因此第一次启动的验证清单可以浓缩成四层与社区流传的四层排查法一一对应第一层宿主权限与研究型访客配置。csrutil allow-research-guests enable是否生效host preflight是否通过vphone-vm是否被 AMFI 拦截失败时先看 troubleshooting.md 的第一条——vphone-vm is killed before the VM opens运行vphone-cli host preflight它会给出可执行的修复命令。第二层核心 Bundle 与图形入口分离。Launchpad 与 VPhone.bundle 版本系列是否匹配Bundle 是否真的装上了vphone-launchpad-cli status可查若只解压了 Launchpad 却没装 Bundle界面自然不会有机器可建。第三层固件配对与在线恢复。iPhone IPSW 与 cloudOS 是否属于已验证配对cloudOS 是否是含vphone600ap的26.4-23E5207q恢复过程是否真的能连上 Apple 拿票据这三项任一不满足流水线都会在中途失败。第四层建机完成与 GUI 运行状态的区别。看到 vphoned ping succeeded 只证明验证启动时守护进程应答过不等于 VM 在运行。启动用vm launch name创建后没窗口是正常现象不是 bug。验证运行状态最直接的命令来自 Launchpad 的 CLI 封装launchpad-cli.mdvphone-launchpad-cli vm start research-01 --wait # 等待 vphoned 应答 vphone-launchpad-cli guest rpc research-01 device.infoguest rpc device.info能拿到访客的设备信息这是判断系统真的起来了的最强信号。另外注意当前越狱工作流不会安装 SSH 或 VNC 服务如果在引导时卡在 Press home to continue用 VM 窗口的 Keys → Home 解锁即可——别去找不存在的 VNC 端口。七、5 分钟之外回到开头那句话5 分钟买的是零基础也能走通全流程这件事本身——下载解压、授权 helper、安装 Bundle、点几下鼠标完成建机每一步都有文档和源码支撑失败时每一层都有对应的排查路径。而它真正值钱的地方在 5 分钟之外模板让第二台机器秒级克隆、快照让状态随时回滚、vm export/import支持整机备份迁移、--api-listen 127.0.0.1:8765能把整套系统变成可编程的自动化接口。对开发者和安全研究者来说一台能开、能关、能复制、能接管屏幕输入输出的真 iOS 系统等于把过去要排队借真机、要守着越狱折腾半天的场景压缩成了几行命令。这套工具同时也在提醒我们iOS 生态的不可虚拟化假设正在被技术演进改写。虚拟 iPhone 能做什么、该被用来做什么是下一个值得整个社区继续讨论的问题。【免费下载链接】vphone-cli项目地址: https://gitcode.com/GitHub_Trending/vp/vphone-cli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考