固件变体:DEV 与 JB
固件变体:DEV 与 JB
vphone-cli 把同一份固件按「变体」(variant)打补丁。五个变体中,日常研究与工程主力推荐 dev 与 jb 两档:
dev—— 研究与调试主力。环境伪装 + sysctl spoof + 键盘文本输入(现已跨变体默认安装),配上 debugserver 调试通道,适合绝大多数 App 行为研究、风控对抗与自动化场景。jb—— 完整越狱环境。继承 dev 档的内核级伪装补丁,叠加完整越狱生态(Sileo + apt + TrollStore + tweak 加载),适合需要装包、注入 dylib、深度改系统的场景。
其余三档只在特殊场合使用:less 仅为系统基座(保留 iOS 原生缓解措施,无任何 CFW 定制组件);regular 是不含 dev 增量的默认可用形态;exp 是 jb 之上的特定反 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_spoof:kern.hv_vmm_present屏蔽、kern.bootargs对普通 App 返回 EPERM、hw.machine映射为iPhone17,3、hw.cpufamily、kern.boottime、kern.hv_support、开发者模式状态等一系列读侧伪装。version_string:kern.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 hook:
insert_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 跳过重跑):
- 用 sysbinpack 的 launchctl 替换会崩溃的 procursus 版本
- 建立
/private/var/jb → /private/preboot/<boot-hash>/jb-vphone/procursus符号链接(symlinks) - 修复 mobile 用户目录属主与权限
- 运行
prep_bootstrap.sh初始化 bootstrap - 创建 marker files
- 安装 Sileo(及
VPHONE_DEBS_DIR指定的额外 deb) - 配置 apt 软件源
- 安装 TrollStore(Lite)
- 为 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_vmmOID 改名、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