固件变体:DEV 与 JB

深入解析 vphone 的两档核心变体 dev 与 jb,以及选型指南

固件变体:DEV 与 JB

vphone-cli 把同一份固件按「变体」(variant)打补丁。五个变体中,日常研究与工程主力推荐 devjb 两档

  • dev —— 研究与调试主力。环境伪装 + sysctl spoof + 键盘文本输入(现已跨变体默认安装),配上 debugserver 调试通道,适合绝大多数 App 行为研究、风控对抗与自动化场景。
  • jb —— 完整越狱环境。继承 dev 档的内核级伪装补丁,叠加完整越狱生态(Sileo + apt + TrollStore + tweak 加载),适合需要装包、注入 dylib、深度改系统的场景。

其余三档只在特殊场合使用:less 仅为系统基座(保留 iOS 原生缓解措施,无任何 CFW 定制组件);regular 是不含 dev 增量的默认可用形态;expjb 之上的特定反 VM 实验扩展(身份重写等研究性补丁,实验性质)。本文聚焦 dev 与 jb,其余三档仅在文末一笔带过。

变体决定了三件事:启动链补丁的组合、CFW(Custom Firmware)安装阶段写入 guest 的内容、以及虚拟 iPhone 最终呈现的能力边界。

两档核心变体总览

dev jb
定位 研究 / 调试变体 完整越狱环境
内核补丁 base + devOnly 两组 base + devOnly + jbOnly 三组(包含 dev 全部内核补丁
CFW 阶段 regular 基座 + dev 用户态增量 regular 基座 + JB 越狱引导(不含 dev 的用户态增量)
内核级伪装 sysctl spoof、版本串、蜂窝网卡 同款(继承 devOnly 补丁组)
用户态伪装 9 个 DSC 补丁、相机注入、身份改写 默认不含(可经 standalone 补丁按需叠加)
键盘扩展(Unicode 文本输入) 默认安装(--no-keyboard 可关) 同左(经 regular 基座继承)
越狱特征 launchd hook、procursus、Sileo、TrollStore、TweakLoader
Make target fw_patch_dev + cfw_install_dev fw_patch_jb + cfw_install_jb

dev:研究与调试主力

dev 的设计目标是:不引入越狱特征的前提下,把 VM 打造成一台「看起来像真机」的可调试研究设备。能力分三层。

内核层(fw_patch_dev

在 base 补丁组(APFS 快照挂载、launch constraints、sandbox、代码签名绕过等)之上,追加 devOnly 补丁组:

  • sysctl_spoofkern.hv_vmm_present 屏蔽、kern.bootargs 对普通 App 返回 EPERM、hw.machine 映射为 iPhone17,3hw.cpufamilykern.boottimekern.hv_support、开发者模式状态等一系列读侧伪装。
  • version_stringkern.version 构建标识从 RELEASE_ARM64_VRESEARCH1 改写为 RELEASE_ARM64_T8140(A18 SoC,对应 iPhone17,3)。
  • ifnet_pdp_ip:注册 pdp_ip0~4 蜂窝网卡 ifnet,让 getifaddrs() 感知到真实蜂窝网络。
  • pvfs(per-process file view):内核级「每进程文件视图」——同一台 VM 上,不同进程看到的文件系统可以不同。规则分四类动作:REDIRECT 任意路径重定向、DENY 拒绝访问、HIDE 从目录列表隐藏、ALLOW 白名单豁免,支持递归目录与 * 通配。规则由 guest 守护进程 vphoned 统一管理并持久化(重启后自动重推),经 vphone-cli control pvfs-list / pvfs-apply / pvfs-reload 热更新——改动即时生效,无需重启 VM。
  • FairPlay 执行/解密绕过、挂载标志修正等(详见仓库 research/0_binary_patch_comparison.md)。

这批补丁的逐项原理见本帮助中心「风控对抗与指纹伪装」一篇。

CFW 层(cfw_install_dev

先完整安装 regular 基座(cryptex、GPU 驱动、激活绕过、vphoned 守护进程),再叠加 dev 用户态增量:

  • 9 个 dyld 共享缓存(DSC)补丁:CoreMotion 传感器可用性与数据、CoreTelephony SIM 运营商与无线接入技术、CMCapture、Foundation NSPredicate 安关门、AVAudio 输出路由、Metal GPU family、LocalAuthentication 生物识别 ×2。
  • 相机注入libvcamcaptured_dev.dylib 注入 cameracaptured,注册一组合成摄像头(真机同款镜头组形态)。
  • 键盘扩展(跨变体能力,非 dev 专属):所有非 less 变体默认安装(创建时 --no-keyboard 可关);dev 下 vphoned 以 dev entitlements(含键盘 App Group)签名,安装 .vphone-keyboard.ipa,获得 Unicode 文本输入能力(keyboard 能力)。
  • 身份改写patch-devicetree --full-identity(model / target-type / compatible 等 DeviceTree 身份属性 → iPhone17,3 / D47AP)+ patch-build-version(SystemVersion 伪装,默认 23F77)。
  • 调试通道:debugserver 及其 entitlements(task_for_pid-allow),可附加调试任意进程。

典型用法

make fw_patch_dev && make cfw_install_dev   # 或直接 vphone-cli vm create 走完整管线
make boot

之后可以:用 debugserver 附加任意进程;用 CLI / GUI 注入触摸与键盘文本;跑自动化脚本采集 App 行为;让被测 App 通过常见风控 SDK 的 VM / 模拟器 / 传感器探针。

jb:完整越狱环境

jb 的内核补丁是 dev 的超集(base + devOnly + jbOnly),CFW 阶段则走「regular 基座 + JB 越狱引导」——内核级伪装与 dev 同款,但不默认安装 dev 的用户态增量。

内核层(fw_patch_jb

jbOnly 补丁组解决「rootful 语义下的越狱引导」:task_for_pid / AMFI trustcache 判定 / sandbox 扩展 hook / convert_port_to_map / exec 策略与 persona 校验 / bsd_init_auth imageboot gate 等约 30 个补丁(与 dev 重叠的实现统一走 JB 版本,语义匹配更宽)。iOS 27 基座另有一批专用补丁。devOnly 的 sysctl spoof、版本串改写、蜂窝网卡注册等内核级伪装在 jb 上同样生效。

CFW 层(cfw_install_jb

  • launchd hookinsert_dylib 向 launchd 注入 /b(launchdhook 的短别名),越狱环境随系统启动自动生效(DISABLE_LAUNCHD_HOOK=1 可关闭)。
  • procursus bootstrap:解到 <boot-hash>/jb-vphone/procursus,提供完整命令行与 dpkg/apt 生态;TweakLoader 编译安装,MobileSubstrate 类 tweak 可加载。
  • debugserver entitlements:与 dev 相同的调试通道。
  • iosbinpack64 同样以隐蔽路径 /usr/libexec/.sysbinpack 落盘;vphoned 以 regular entitlements 签名(默认装键盘时在 entitlements 基础上合并键盘 App Group,broker 可用;--no-keyboard 时不合并)。
  • 需要传感器 / SIM 等 DSC 补丁时,可用 standalone 补丁(make sensor_patch / sim_patch 等)对已装系统单独叠加。

JB 首启自动收尾(/cores/vphone_jb_setup.sh

jb 变体首次正常启动时,guest 内的 LaunchDaemon com.vphone.jb-setup 自动运行 /cores/vphone_jb_setup.sh 完成越狱环境收尾(幂等,靠 done marker 跳过重跑):

  1. 用 sysbinpack 的 launchctl 替换会崩溃的 procursus 版本
  2. 建立 /private/var/jb → /private/preboot/<boot-hash>/jb-vphone/procursus 符号链接(symlinks)
  3. 修复 mobile 用户目录属主与权限
  4. 运行 prep_bootstrap.sh 初始化 bootstrap
  5. 创建 marker files
  6. 安装 Sileo(及 VPHONE_DEBS_DIR 指定的额外 deb)
  7. 配置 apt 软件源
  8. 安装 TrollStore(Lite)
  9. 为 SSH 会话设置 shell profile

收尾日志写在 guest 内 /var/log/vphone_jb_setup.log。如果首启后 Sileo 不可用或 TrollStore 缺失,先查这份日志(可经 vphoned 文件浏览器直接读)。

dev 与 jb 详细对比

维度 dev jb
内核级伪装(sysctl spoof / 版本串 / pdp_ip 蜂窝网卡) ✅(继承 devOnly 补丁组)
DSC 用户态补丁(CoreMotion / CoreTelephony / Face ID 等 9 项) ❌(可 make sensor_patch / sim_patch 单独叠加)
相机注入(合成摄像头 + 宿主推帧)
键盘注入(Unicode 文本输入) ✅ 默认安装(dev entitlements 签名激活) ✅ 默认安装(regular 签名合并键盘 App Group)
DeviceTree 身份改写 + SystemVersion 伪装 ❌(全量改写属 exp 变体流程)
debugserver 调试任意进程
procursus / dpkg / apt 命令行生态
Sileo 包管理器 ✅(首启自动安装)
TrollStore ✅(首启自动安装 Lite 版)
MobileSubstrate / TweakLoader(tweak 加载)
越狱特征(launchd hook、/var/jb 等) 有(对反越狱检测敏感的被测对象会看到)
攻击面 / 指纹复杂度 更可控 更大(越狱组件本身是特征)

两个关键区别:

  • 越狱本身是一组指纹jb 的 launchd hook、/var/jb、procursus 目录、Sileo/TrollStore 都会被反越狱检测识别;dev 则不引入这些特征。
  • 用户态伪装的默认覆盖面不同。内核层两档一致;DSC 补丁、相机、身份改写默认只在 dev 落地,jb 要靠 standalone 补丁按需补齐;键盘扩展则已跨变体默认安装(--no-keyboard 可关)。

如何选型

dev,当你要:

  • 研究 App 行为、风控对抗、设备指纹——被测对象会做反越狱检测时,dev 的指纹面更干净。
  • 用 debugserver 调试 / 附加任意进程,或做逆向动态分析。
  • 跑自动化(触摸、键盘文本注入、截图、账户切换),不需要在 guest 里装第三方包。
  • 需要完整的传感器 / 相机 / SIM / 身份伪装开箱即用。
  • 批量开多台 VM 做工程化集群——dev 无首启收尾依赖,启动即用。

jb,当你要:

  • 在 guest 内安装 deb 包 / 命令行工具(Sileo / apt 生态)。
  • 加载 MobileSubstrate 类 tweak,或向系统进程注入自定义 dylib。
  • 需要 TrollStore 做永久签名 / 侧载研究。
  • 做需要 rootful 越狱语义的底层实验(内核 hook、hook 框架验证等)。

简单判据:不需要在 guest 里「装东西」(deb / tweak),就选 dev;需要越狱生态才上 jb——再按需用 standalone 补丁补齐用户态伪装。

两条实用建议:

  • 变体切换成本不低(重打固件补丁 + 重跑 CFW 安装,VM 必须关机),建 VM 前先想清楚研究需求;不确定时从 dev 开始。
  • 需要 jb 但又怕越狱特征影响被测 App?先在 dev 上复现行为,再切 jb 对照,或评估 exp 的实验性反检测补丁是否适用。

其他三档(了解即可)

  • less —— 系统基座:仅基础启动链补丁 + 文件系统处理,保留 iOS 原生缓解措施;补丁阶段需要 sudo没有 CFW 安装阶段(无 vphoned、无调试件)。只在需要「最接近原版」的对照基线时使用。
  • regular —— 默认可用形态:base 补丁 + regular CFW 基座,能正常启动使用,但不含 dev 的伪装与调试增量。
  • exp —— 特定反 VM 实验扩展jb 超集,追加内核 hv_vmm OID 改名、DSC 黑名单翻转、DeviceTree 全量身份重写(--full-identity 级别)、SystemVersion 改写等反 VM 检测研究补丁;实验性质,其余变体不受影响。

Make target 族

# 固件补丁阶段(对解包后的 *Restore*/ 目录原地二进制补丁)
make fw_patch_dev
make fw_patch_jb

# CFW 安装阶段(VM 必须关机,host-mount 写入 Disk.img 并翻转 boot snapshot)
make cfw_install_dev
make cfw_install_jb

通常不需要单独跑这些 target——vphone-cli vm create 会按所选变体自动走完整管线;单独 target 用于重打补丁或调试。

深入阅读

  • 反检测与指纹对抗的逐项原理:本帮助中心「风控对抗与指纹伪装」一篇
  • 补丁管线工作机制:本帮助中心「固件补丁管线」一篇
  • 逐变体 patch 数与逐 patch 二进制细节:仓库 research/0_binary_patch_comparison.md