macOS 15+ · Apple Silicon · Virtualization.framework PV=3

在 Mac 上启动一台真正可控的虚拟 iPhone

vphone 是基于 Apple Virtualization.framework(PV=3 私有授权)的虚拟 iPhone 研究与工程平台:在 Apple Silicon 上运行完整的 iOS 用户态与内核——不是模拟器,也不是容器。固件补丁、DFU restore、CFW 注入、风控对抗、多 VM 管理、集群与 AI 自动化,构建期与运行期两条主线在同一套 Swift 工程里闭环。

$vphone-cli vm create myphone -V dev# 研究变体:完整调试 + 环境伪装
$vphone-cli vm create myphone -V jb# 越狱变体:Sileo / TrollStore / procursus
一条命令端到端编排:fw prepare → fw patch → DFU restore → cfw install → first boot

全景架构

四个进程域 + 一组共享库:宿主机上的三个前端链接同一组 SwiftPM 库,受限特权操作收敛到一个 root LaunchDaemon,VM 内运行完整 iOS 与 vphoned 守护进程,外部客户端只认一个 Unix socket。

外部 · 控制与客户端
automation/Python E2E 框架:截图像素空间感知 + 触摸/键盘注入 + 轮询验证闭环
MCP / AI agentVM 操作暴露为 MCP 工具,模型直接驱动设备
nc / 任意脚本不依赖 SDK:一行 JSON 进,一行 JSON 出
宿主 · 前端层(macOS)
vphone-cli宿主应用:无头驱动(boot --no-graphics)/ 窗口交互 / 菜单栏 UI
vphone-managerSwiftUI 多 VM 集中控制台,本地与远程节点同构操作
vphone-agent集群节点 daemon:HTTP API + Bearer token,任意 Mac 可入群
共享库VPhoneCore(bundle / manifest / restore / host-mount)· VPhoneCreate(vm create 编排)· FirmwarePatcher(补丁器 + CFW 安装器)· VPhoneManagerCore(Manager / agent 共享纯逻辑层)· VPhoneNetworking · VPhoneLogging
宿主 · 特权与辅助层
com.vphone.helperroot LaunchDaemon:受限特权协议,只做 host-mount Disk.img 与 ApfsSnapRename 翻转 snapshot
pymobiledevice3_bridge.pyDFU restore 桥——全链路唯一保留的 Python 生产子进程
network-proxyGo sidecar:gVisor 用户态协议栈,SOCKS5 / HTTP 透明代理 + 逐 flow 遥测
Guest 域 · Virtualization.framework PV=3
iOS 用户态 + XNU 内核hybrid iPhone × cloudOS 固件:完整系统,非容器非模拟
vphonedguest 守护进程:vsock:1337 命令执行端,length-prefixed JSON,免重启热更新
guest 组件tweakloader · vcam 虚拟相机 · 内核级 PVFS 每进程文件视图与重定向(规则热更新)· Unicode 键盘扩展

关键设计:vphone-manager 与 vphone-agent 都不持有 VZVirtualMachine——一律 spawn 已签名(PV=3 私有 entitlement)的无头 vphone-cli 子进程,经 HostControl socket 驱动。因此 agent 无需私有 entitlement 即可正常签名分发到任意 Mac,重启也不影响托管中的 VM;standalone agent 与 Manager 内嵌 agent 共享同一张 53 条路由表,两侧行为完全一致。

构建期与运行期两条主线详解 →

两档主力变体:DEV 与 JB

同一份 hybrid 固件,补丁组合与 CFW 内容由 -V 变体决定。日常研究与工程聚焦两档:dev jb——后者是前者的超集,共享全部内核伪装与调试补丁。

dev

开发 / 研究主力变体

保留完整调试能力与环境伪装,不引入越狱特征——攻击面与指纹可控,是日常研究、风控对抗与 AI 自动化的默认形态。

  • TXM dev 补丁器:Selector24 / get-task-allow / 调试器 entitlement 放行,debugserver 可调试任意进程
  • 内核 devOnly 补丁组:sysctl 伪装、kern.version 改写、pdp_ip0~4 蜂窝网卡注册
  • CFW 增量:debugserver、DSC 补丁(含 CoreMotion 传感器伪造)、相机注入、 Unicode 键盘扩展、身份改写
53 个启动链补丁 · 日常研究与自动化的默认形态
jb

完整越狱变体

dev 的超集:完整保留 dev 的内核伪装与调试补丁,再叠加越狱链——launchd hook + procursus 引导,开箱即用的越狱生态。

  • iBSS 跳过 generate_nonce:apnonce 保持稳定,SHSH 票据可离线复用
  • jbOnly 内核组 + launchdhook.dylib 注入 + Procursus bootstrap,Sileo / apt 生态可用
  • 首启自动收尾:LaunchDaemon vphone_jb_setup.sh 自动建符号链接、装 Sileo / TrollStore,日志落 /var/log/vphone_jb_setup.log
112 个启动链补丁 · 15 项 CFW 内容(含 BaseBin hooks / TweakLoader)

底层另保留 regular(最小可用基座,不含越狱与伪装增量)与 exp(jb 超集 + 反 VM 检测研究补丁)两档作为工程基线与实验扩展;逐 patch 对比以仓库 research/0_binary_patch_comparison.md 为准。

变体选型与 Make target 对照 →

从 IPSW 到虚拟 iPhone:五阶段启动流程

vm create VPhoneCreateOrchestrator 编排五阶段(结构化事件流 + 全程可取消),vphone-manager 的创建向导 in-process 驱动同一编排器;Python 仅保留 DFU restore 桥一处子进程。每阶段也可单独驱动,便于调试与重跑。

  1. 01fw prepare

    固件准备

    iPhone 与 cloudOS(PCC)两份 IPSW 解包合并,产出可 restore 的混合固件。

    • 下载与解包支持断点续传 + 本地缓存,缓存命中可离线重跑
    • cloudOS 的 kernelcache 与 Firmware/ 子树(agx / all_flash / ane / dfu / pmp)覆盖进 iPhone 树;dmg 与 trustcache 保留 iPhone 版
    • 生成 hybrid BuildManifest:DFU 下自认 cloudOS research 设备,文件系统来自 iPhone 侧;配对表单一数据源在 config/firmware_catalog.json
  2. 02fw patch

    启动链补丁

    对 *Restore*/ 目录原地改写启动链组件,按变体串联补丁器。

    • 覆盖 dfu(iBSS / iBEC)、all_flash(LLB / DeviceTree)、TXM 与 kernelcache:透明解包 IM4P → 打补丁 → 按原容器结构写回
    • 补丁点全部经 Capstone 反汇编按语义锚点定位(mnemonic / operands / 控制流),零硬编码偏移;替换字节只出自 Keystone helper
    • 每个补丁记录 PatchRecord(offset 与前后状态)落 patch_report.json,可审计、可回归比对
  3. 03DFU restore

    刷机

    机器进 DFU,把混合固件真正刷进虚拟磁盘。

    • boot --dfu 先启动 ramdisk 引导,经 pymobiledevice3_bridge.py 与恢复模式交互
    • restore-get-shsh 抓取 SHSH blob 存 bundle 根, restore-update --tss 走离线 TSS 刷入
    • 系统持久化到 Disk.img SEPStorage;DFU 进程收尾终止,guest 干净关机
  4. 04cfw install

    定制固件注入

    host-mount 挂起系统盘,把变体内容写进 guest(VM 须关机)。

    • CFWHostMounter com.vphone.helper(root LaunchDaemon)挂载 Disk.img——特权面收敛在受限 helper 协议内
    • 变体安装器按 phase 写入:守护进程、工具链、DSC 补丁、越狱引导……
    • ApfsSnapRename 翻转 APFS boot snapshot,下次启动直接吃到新系统卷
  5. 05first boot

    首启与自检

    启动 VM,验证整条链路并把环境收拾到位。

    • vphoned vsock:1337 就位,控制面即刻可用
    • boot analysis 自检启动关键路径;jb 变体由 LaunchDaemon 自动完成越狱收尾
    • 失败收敛为结构化错误(fwPrepareFailed / restoreGetSHSHFailed / firstBootPanic…),子进程 defer 终止不留悬挂

补丁管线细节与固件配对表 →

风控对抗与环境伪装

对抗目标不是「藏得更深」,而是让风控读到一台语义自洽的真机:iPhone17,3、A18(T8140)、有蜂窝、有传感器、进程表干净。内核 sysctl、设备树与硬件、文件系统路径、服务命名四个层面同时收敛——所有伪装均在构建期(kernelcache / DSC / CFW)一次性注入,guest 内没有常驻注入框架。

内核与 sysctl 层

kernel.sysctl_spoof · kernel.version_string

  • kern.hv_vmm_present caller-aware 动态伪装:代码洞 hook + 静态进程白名单(launchd / 系统守护进程读真值,否则 panic),App 读到 0;AMFI 与 Sandbox 内部查询同步处理
  • kern.bootargs 对 App 返回 EPERM(模拟真机受限语义),launchd 读真值
  • hw.machine / hw.cpufamily 恒定返回 iPhone17,3 / 0x6F5129AC(A18 真实值)
  • kern.version RELEASE_ARM64_VRESEARCH1 RELEASE_ARM64_T8140,等长 NUL 填充——一发命中的「sysctl 银弹」失效
  • cpus=6 boot-arg:不打 sysctl 补丁,从内核拓扑源头只拉起 6 CPU,hw.ncpu 与 commpage 的 activeProcessorCount 天然一致
  • kern.hv_support ENOENT→EPERM 模拟真机沙盒拒绝;kern.boottime 向过去偏移固定 delta

设备树与硬件指纹

DeviceTree · ifnet · GPU bundle · CoreMotion

  • DeviceTree 身份改写:虚拟硬件指纹漂移,把虚拟化平台的硬件身份对齐真实机型
  • pdp_ip0~4:bsd_init 钩子注册 IFT_CELLULAR 假蜂窝 ifnet——App getifaddrs() 可见蜂窝网卡,无需基带
  • GPU 驱动包伪装: AppleParavirtGPUMetalIOGPUFamily AppleGFXHW,bundle 名、bundle id 与 Metal plugin 引用同步改写
  • CoreMotion 高真仿真:陀螺仪 / 加速度计 / 磁力计 / 气压计 / 融合运动全伪造——arc4random 均匀噪声叠加三角波手持漂移,静止态 std_sum ≈ 5.4e-3,稳过「零噪声探针」

路径与服务指纹

CFW 落盘形态 · launchd 进程表

  • iosbinpack64 物化为 /usr/libexec/.sysbinpack:工具链全盘路径重写,guest 无显眼目录名
  • 守护进程隐蔽命名:vphoned 伪装为 com.apple.mobile.assetd、bash 为 com.apple.security.shell——launchd 进程表第一眼像原生系统
  • 幂等清理 bash / dropbear / trollvnc / rpcserver_ios 等历史显眼 daemon 键值残留
  • VNC 默认关闭:0.0.0.0 监听 5901 是端口扫描指纹;屏幕走 vphone 原生 H.264 流,VPHONE_VNC_DAEMONS=1 才注入

逐层伪装原理与变体归属全解 →

产品化与集群工程化

从单机研究工具到可运维的设备农场:GUI、集群节点 daemon、网络 sidecar 与自动化控制面各自独立成进程,共享同一组库与同一套协议——本地与远程、人工与 AI,操作语义完全同构。

SwiftUI Desktop App

vphone-manager · 桌面集中控制台

  • Library / Gallery / Dashboard / Firmware / Cluster 五模式;本地与远程节点 VM 同一界面统一操作
  • Console:H.264 屏幕流(硬编硬解,失败自动回退轮询截图)、手势自动识别、录屏导出 .mov;SSH 内嵌终端
  • 文件 / 钥匙串浏览、多账号 profile 切换、live(冻结内存现场)/ cold 快照、创建向导与固件下载面板;端口转发把 guest 服务映射到 本机回环(远程 VM 经节点 agent 中继)
  • 发布形态 VPhone.app:内嵌签名 CLI、特权 helper、agent 与 guest 资源,Finder 双击即用
Cluster Node Daemon

vphone-agent · 集群节点

  • 任意 Mac 跑一个 agent 即成节点;与 Manager 内嵌 agent 共享同一张 53 条路由表(AgentRoutes 单一数据源),两侧行为一致
  • mDNS _vphone-node._tcp 自动发现 + 6 位配对码免手填 token;协议版本不匹配 fail-fast 拒绝
  • 屏幕流 / SSH / 事件推送 / 端口转发按需分配 临时 TCP 端口,独立 per-port token 握手
  • agent 不触碰 Virtualization.framework:spawn 签名无头 CLI 子进程承担,agent 重启不伤托管中的 VM
Go Network Sidecar

network-proxy · 透明代理与遥测

  • gVisor 用户态协议栈重建 guest TCP / UDP;SOCKS5 / HTTP CONNECT 上游,guest 内零配置
  • 固定拓扑(网关 192.168.127.1 / guest .2),分 VM proxy_config.json,运行时 network-control 热改分流规则与 UDP 策略
  • 逐 flow 遥测标注 proxy / direct / blocked,可订阅事件流
  • fail-closed:sidecar 意外退出即终止 VM,绝不静默回退 NAT
Automation Control Plane

vphone.sock · 自动化与 AI 控制面

  • tap / swipe / 截图 / 文件 / 定位 / 剪贴板……每个动作回传内联截图,天然适配 AI 视觉闭环
  • Python E2E 框架:感知级联(模板 / AKAZE / OCR / Vision)+ Verifier 轮询验证;record / replay 锚点回放抗坐标漂移
  • llm-context 把屏幕上下文导出给 LLM 直接生成操作脚本;MCP server 将 VM 操作暴露为 AI 工具
  • vphoned 免重启热更新:SHA-256 比对 → 推送 → launchd 重启;Manager 版本比对徽章一键升级,guest 侧迭代不用重建 VM
Reliability Engineering

自愈闭环 · 可靠性基建

  • vm create Checkpoint 续跑:失败 / 取消 / 断电后重跑从断点续起, restore 5–30 分钟不再白做
  • 崩溃自愈:VM panic / 信号死亡自动重启(5 / 15 / 45s 退避、3 次预算, 运行 ≥10min 重置);崩溃事件结构化落盘,Dashboard 最近崩溃卡片一览
  • guest 无响应看门狗、节点掉线 stale 标记(≈45s 离线缓存 / ≈90s 清空缓存)、 幂等 GET 瞬时网络错误自动重试(POST / PUT 绝不重试)
  • IPSW SHA-256 校验 + 30 天 TTL 清扫、restore 桥超时 fence(SHSH 10min / restore 45min)、25 GB 磁盘空间预检

Manager 使用指南 →集群与 vphone-agent →自动化框架 →

运行实况

一台启动完成的虚拟 iPhone(dev 变体),经 vphone-manager 屏幕流与控制面操控——本地与远程节点同一套界面。

vphone-manager 界面一览

vphone-manager VM 详情页
VM 详情页 · Console 屏幕流
Network 面板:代理遥测与端口转发
Network · 代理遥测与 Port Forwards
Cluster 集群面板
Cluster · 节点与链路质量
Firmware 固件下载面板
Firmware · 镜像缓存与下载

开始构建你的虚拟 iPhone

Apple Silicon + macOS 15+(放宽 SIP / AMFI),一次性安装特权 helper,之后一条命令从 IPSW 到可自动化的设备。