cloverfield11/ios26-hypervisor-research
GitHub: cloverfield11/ios26-hypervisor-research
首次公开证明苹果在消费级 iPhone 上已启用硬件虚拟化,通过静态分析证实 SPTM 与 Hypervisor 框架的存在。
Stars: 0 | Forks: 0
# 苹果在 iPhone 上搭载完整的虚拟机监控程序 —— 并且已经开启
### iOS 26 中 SPTM 虚拟化基础设施的静态反汇编
**作者:** Igor Gaponenko
**日期:** 2026 年 4 月 13 日
**目标:** iOS 26.4.1 (23E254),iPhone 14 Pro (A16 Bionic, t8120)
**XNU 源码:** xnu-12377.1.9 (Darwin 25,开源版本)
**工具:** [blacktop/ipsw](https://github.com/blacktop/ipsw) v3.1.671、Python、ARM64 手动解码
---
## TL;DR
**苹果在每一台搭载 A15 及以上芯片并运行 iOS 26 的 iPhone 上都部署了一个完整且已启用的虚拟机监控程序。** 通过对 SPTM 固件、XNU 内核缓存以及从已签名 IPSW 提取的设备树进行静态分析,我们证明了以下几点:
1. SPTM 固件包含完整的虚拟机 API:客户机进入/退出、Stage-2 页表、VMID 分配以及对 ARMv8.4-NV2 嵌套虚拟化的支持。
2. XNU 内核缓存中嵌入了 Hypervisor 框架代码(`hv_vcpu.c`、`hv_vm_t`、`hv_nested_vm_t`)。
3. 入口由设备树属性 `/product/has-virtualization` 控制。
4. **该属性在 iOS 26.4.1 为 iPhone 14 Pro 提供的生产设备树中设置为 `1`。**
5. 唯一剩余的障碍是 `com.apple.private.hypervisor` 权限。
据我们所知,这是**首次公开记录**苹果已在消费级 iPhone 上启用硬件虚拟化。
---
## 目录
- [背景:什么是 SPTM?](#background-what-is-sptm)
- [方法论](#methodology)
- [阶段 1:XNU 源码分析](#phase-1-xnu-source-analysis)
- [阶段 2:SPTM 字符串分析](#phase-2-sptm-binary-strings)
- [阶段 3:内核缓存分析](#phase-3-kernelcache-analysis)
- [阶段 4:入口点 — 反编译](#phase-4-the-gate--decompilation)
- [阶段 5:设备树 — 证据](#phase-5-device-tree--the-proof)
- [架构](#architecture)
- [影响](#implications)
- [附录:完整数据表](#appendix-complete-data-tables)
---
## 背景:什么是 SPTM?
从搭载 A15 芯片的 iOS 17 开始,苹果用一个新的安全架构 **SPTM**(Secure Page Table Monitor)取代了页保护层(PPL)。SPTM 运行在 **GL2** 权限级别 —— 这是苹果专有的 **Guarded Execution Facility (GXF)** 扩展提供的权限层,与 ARM 标准的 EL0–EL3 权限体系正交。
```
┌─────────────────────────────────────────┐
│ Apple Silicon SoC │
├─────────┬─────────┬─────────┬───────────┤
│ EL0 │ EL1 │ GL1 │ GL2 │
│ User │ XNU │ SK │ SPTM │
│ Apps │ Kernel │ Secure │ Page │
│ │ │ Kernel │ Table │
│ │ │ │ Monitor │
└─────────┴─────────┴─────────┴───────────┘
```
SPTM 负责所有的页表修改、内存重映射 —— 以及我们目前证明的 **虚拟机管理**。XNU 通过 `GENTER` 指令与 SPTM 通信,该指令将执行从 EL1 切换到 GL2。
关键的前期工作:
- [arXiv 2510.09272](https://arxiv.org/abs/2510.09272) — SPTM 架构概述
- [Dataflow Forensics](https://www.df-f.com/blog/sptm4) — “SPTM: The Last Bits”(2025 年 11 月)
- [Jonathan Levin](https://newosxbook.com/bonus/sptm2.html) — SPTM 第二部分
---
## 方法论
所有分析均**完全离线**进行,使用从公开可获取的苹果签名 IPSW 中提取的文件。无需越狱、无需设备访问、无需专有工具。
### 提取流水线
```
# 1. Install ipsw 工具
curl -sL -o ipsw.tar.gz \
"https://github.com/blacktop/ipsw/releases/download/v3.1.671/ipsw_3.1.671_macOS_x86_64.tar.gz"
tar xzf ipsw.tar.gz
# 2. Remote-extract kernelcache(无需完整 IPSW 下载)
./ipsw download ipsw --device iPhone15,2 --latest --kernel -y
# 3. Remote-extract SPTM firmware
./ipsw download ipsw --device iPhone15,2 --latest --pattern 'sptm' -y
# 4. Remote-extract DeviceTree
./ipsw download ipsw --device iPhone15,2 --latest --pattern 'DeviceTree' -y
# 5. Decode IM4P containers to raw binaries
./ipsw img4 im4p extract Firmware/sptm.t8120.release.im4p -o sptm.t8120.bin
./ipsw img4 im4p extract Firmware/all_flash/DeviceTree.d73ap.im4p -o DeviceTree.bin
```
### 分析的文件
| 文件 | 大小 | 描述 |
|---|---|---|
| `sptm.t8120.bin` | 1.1 MB | SPTM 固件,MacMach-O ARM64e |
| `kernelcache.release.iPhone15,2` | 59 MB | 文件集 MachO,ARM64e |
| `kernelcache.research.iPhone15,2` | 59 MB | 研究变体 |
| `DeviceTree.d73ap.im4p` | 49 KB | 苹果设备树 |
| XNU xnu-12377.1.9 源码 | — | [apple-oss-distributions/xnu](https://github.com/apple-oss-distributions/xnu) |
---
## 阶段 1:XNU 源码分析
苹果虽然开源了 XNU,但**系统性地抹除了** Stage-2 虚拟化代码路径。该抹除具有一致性和明确目的:
### 抹除模式
每个处理虚拟机/Stage-2 路径的函数都采用相同的构造:
```
// osfmk/arm64/sptm/pmap/pmap.c — xnu-12377.1.9
static sptm_frame_type_t get_sptm_pt_type(pmap_t pmap) {
const bool is_stage2_pmap = false; // ← HARDCODED
if (is_stage2_pmap) {
return XNU_STAGE2_PAGE_TABLE; // ← Dead code in source
} else {
return pmap->type == PMAP_TYPE_NESTED ? XNU_PAGE_TABLE_SHARED : XNU_PAGE_TABLE;
}
}
```
该模式在 `pmap_create_options_internal()`、`pmap_tt1_allocate()`、`pmap_tt1_deallocate()`、`pmap_destroy_internal()` 等函数中重复出现。每个函数都包含 `const bool is_stage2 = false` 或 `const bool is_stage2_pmap = false`。
公共 API 函数同样被“解除武装”:
```
bool pmap_performs_stage2_translations(__unused pmap_t pmap) {
return false; // ← Always false in open source
}
```
### 源码实际揭示的内容
尽管存在抹除,基础设施仍然完全可见:
**1. `PMAP_CREATE_STAGE2` 是一个有效标志**(来自 `osfmk/vm/pmap.h`):
```
#define PMAP_CREATE_KNOWN_FLAGS (PMAP_CREATE_64BIT | PMAP_CREATE_STAGE2 | \
PMAP_CREATE_DISABLE_JOP | PMAP_CREATE_FORCE_4K_PAGES | ...)
```
**2. pmap 结构体包含 VMID 字段:**
```
// osfmk/arm64/sptm/pmap/pmap.h
union {
uint16_t asid; // Process address space ID
uint16_t vmid; // Virtual Machine ID
};
```
**3. VMID 架构:** 256 个硬件 VMID,偶数为 SK,奇数为 XNU → 可用 128 个。
**4. Stage-2 页表几何结构存在:**
```
pmap_table_level_info_4k_stage2[] // Full 4K Stage-2 with 40-bit IPA
```
**5. SPTM 接受 VM 帧类型:**
```
sptm_retype(pa, XNU_DEFAULT, XNU_STAGE2_ROOT_TABLE, retype_params);
// retype_params.vmid = pmap->vmid (for Stage-2)
// retype_params.asid = pmap->asid (for Stage-1)
```
---
## 阶段 2:SPTM 二进制字符串分析
对 **生产环境** SPTM 固件进行字符串分析,揭示了完整的虚拟机子系统。这些字符串存在于发布的 A16 二进制文件中 —— 并非调试版,也非开发版。
### VM API 函数
```
sptm_guest_enter
sptm_guest_exit
sptm_guest_dispatch
sptm_guest_va_to_ipa
sptm_guest_stage1_tlb_op
```
### 虚拟机状态机
```
STATE_XNU_GUEST
EVENT_ENTER_GUEST
EVENT_EXIT_GUEST
```
### Stage-2 基础设施
```
acquire_stage2_root_pt
stage2_root_pt
stage2_root_pt_fte->type
stage2_root_pt_tsd->vmid
XNU_STAGE2_PAGE_TABLE
XNU_STAGE2_ROOT_TABLE
current_vmid
validate_vmid
```
### VMID 位图(存在,未被剥离!)
```
%s: VMID 0x%hx was already clear in sptm_vmid_bitmap
```
### NV2 嵌套虚拟化
```
VIOLATION_GUEST_ILLEGAL_NV2_BADDR
```
这证明苹果硅实现了 **ARMv8.4-NV2**(带 VNCR 页的嵌套虚拟化 v2)。SPTM 验证 NV2 基地址,意味着硬件支持在虚拟机内运行虚拟机。
### 启动入口门控
```
bootstrap_determine_virtualization_support
has-virtualization
device_is_prod_fused_init
```
### 违规字符串(错误路径 —— 证明功能代码存在)
| 字符串 | 含义 |
|---|---|
| `VIOLATION_GUEST_ENTER_INTERRUPTS_ENABLED` | 禁止在中断开启时进入客户机 |
| `VIOLATION_GUEST_ILLEGAL_NV2_BADDR` | 非法的 NV2 基地址 |
| `VIOLATION_GUEST_INVALID_S1_TLB_OP` | 非法的客户机 TLB 操作 |
| `VIOLATION_ILLEGAL_VIRTUALIZATION_CALL` | 非法的虚拟机调用 |
| `VIOLATION_INVALID_VMID` | 错误的 VMID |
| `VIOLATION_VMID_IN_USE` | VMID 冲突 |
---
## 阶段 3:内核缓存分析
XNU 内核缓存中**嵌入了 Hypervisor 框架代码** —— 没有独立的 `AppleHypervisor` 扩展。代码直接编译进 `com.apple.kernel`。
### 内核对象
| 字符串 | 类型 |
|---|---|
| `hv_vm_t` | VM 内核对象 |
| `hv_nested_vm_t` | 嵌套 VM 对象 |
| `hv_mem_notify_t` | 内存通知对象 |
| `IKOT_HYPERVISOR` | Mach 端口类型 |
### 编译进内核的源文件
```
# 1. Install ipsw 工具
curl -sL -o ipsw.tar.gz \
"https://github.com/blacktop/ipsw/releases/download/v3.1.671/ipsw_3.1.671_macOS_x86_64.tar.gz"
tar xzf ipsw.tar.gz
# 2. Remote-extract kernelcache(无需完整 IPSW 下载)
./ipsw download ipsw --device iPhone15,2 --latest --kernel -y
# 3. Remote-extract SPTM firmware
./ipsw download ipsw --device iPhone15,2 --latest --pattern 'sptm' -y
# 4. Remote-extract DeviceTree
./ipsw download ipsw --device iPhone15,2 --latest --pattern 'DeviceTree' -y
# 5. Decode IM4P containers to raw binaries
./ipsw img4 im4p extract Firmware/sptm.t8120.release.im4p -o sptm.t8120.bin
./ipsw img4 im4p extract Firmware/all_flash/DeviceTree.d73ap.im4p -o DeviceTree.bin
```
### 权限声明
```
com.apple.private.hypervisor
com.apple.private.hypervisor.vmapple
com.apple.security.hypervisor
```
### 系统控制接口
```
kern.hv_vmm_present ← Is VMM available?
kern.hv_support ← HV support status
kern.hv_disable ← HV disable switch
```
### 启动初始化
`hv_support_init` 在内核启动期间运行,介于 `kdp_init` 和 `PE_init_iokit` 之间。
### 发行版与研究版:完全一致
发行版与研究版内核缓存中 HV 字符串的差异:**为空**。两者包含完全相同的虚拟化基础设施。
---
## 阶段 4:入口点 — 反编译
我们在 SPTM 代码中定位到对字符串 `"has-virtualization"` 的单个交叉引用,位于 `0xfffffff0270d36b8`,并使用 `ipsw macho disass` 和自定义 Python ADRP/ADD 交叉引用扫描器手动反编译了周围函数。
### 反编译的 `bootstrap_determine_virtualization_support()`
```
// Inline in sptm_bootstrap_late()
// No separate function — embedded in the main bootstrap routine
void virtualization_gate(dt_root) {
dt_node_t *product_node = NULL;
dt_prop_t *prop = NULL;
uint32_t prop_size;
// Step 1: Find "/product" node in device tree
if (dt_find_node(dt_root, 0, "/product", &product_node) != 1)
return; // Node not found → virt disabled
// Step 2: Read "has-virtualization" property
if (dt_get_property(product_node, "has-virtualization",
&prop, &prop_size) != 1)
return; // Property not found → virt disabled
// Step 3: Store result
uint32_t value = *(uint32_t *)prop;
g_virtualization_supported = (value != 0); // → 0xfffffff02708dc40
}
```
### 注释后的汇编
```
; Find "/product" device tree node
0xfffffff0270d3688: ldr x0, [x22, #0xa70] ; DT root
0xfffffff0270d368c: adrp x2,
0xfffffff0270d3690: add x2, x2, #0x60e ; "/product"
0xfffffff0270d3698: mov x1, #0
0xfffffff0270d369c: bl dt_find_node
0xfffffff0270d36a0: cmp w0, #1
0xfffffff0270d36a4: b.ne skip ; not found → skip
; Get "has-virtualization" property
0xfffffff0270d36b8: adrp x1,
0xfffffff0270d36bc: add x1, x1, #0x660 ; "has-virtualization"
0xfffffff0270d36c8: bl dt_get_property
0xfffffff0270d36cc: cmp w0, #1
0xfffffff0270d36d0: b.ne done ; not found → leave as 0
; Read value, convert to bool, store
0xfffffff0270d36d4: ldur x8, [fp, #-0x60] ; prop pointer
0xfffffff0270d36d8: ldr w8, [x8] ; value (uint32)
0xfffffff0270d36dc: cmp w8, #0
0xfffffff0270d36e0: cset w8, ne ; bool: 1 if nonzero
0xfffffff0270d36e4: adrp x9,
0xfffffff0270d36e8: strb w8, [x9, #0xc40] ; STORE → 0xfffffff02708dc40
```
### 入口门控的关键属性
| 属性 | 值 |
|---|---|
| **DT 节点路径** | `/product` |
| **DT 属性名** | `has-virtualization` |
| **熔丝检查** | **否** — `device_is_prod_fused_init` 位于独立代码块中 |
| **启动参数覆盖** | **否** — 此路径中无 `PE_parse_boot_argn` |
| **结果存储** | `0xfffffff02708dc40` — `__LATE_CONST` 中的 1 字节 |
| **只读一次** | 是 —— 在启动时设置,永不重新评估 |
### 所有使用 `g_virtualization_supported` 的位置
| 地址 | 操作 | 上下文 |
|---|---|---|
| `0xfffffff0270d36e4` | **STRB** | 引导阶段 — 设置标志 |
| `0xfffffff0270d7f74` | LDRB → TBZ | 分发表验证器 |
| `0xfffffff0270dcc40` | LDRB → TBNZ | `genter_dispatch_entry` (`dispatch.c:1410`) |
| `0xfffffff0270e62e8` | LDRB → TBZ | 重类型处理程序 |
所有三个消费者遵循相同模式:
```
ldrb w9, [x9, #0xc40] ; load virtualization_supported
tbz w9, #0, ; if 0 → deny/panic
```
---
## 阶段 5:设备树 — 证据
我们从同一份签名 IPSW 中提取了设备树(`DeviceTree.d73ap.im4p`,对应 iPhone 14 Pro),并搜索了该属性。
### 原始十六进制转储
```
Offset Hex ASCII
────────────────────────────────────────────────────────────
0x3862c: 68 61 73 2d 76 69 72 74 75 61 6c 69 7a has-virtualiz
0x38639: 61 74 69 6f 6e 00 00 00 00 00 00 00 00 ation........
0x38646: 00 00 00 00 00 00 00 00 00 00 ..........
0x3864c: 04 00 00 00 size = 4
0x38650: 01 00 00 00 VALUE = 1 ✅
```
### 结果
```
/product/has-virtualization = 1 (uint32_t, little-endian)
```
**虚拟化在生产 iPhone 14 Pro 上已启用。**
### 附加的 VM 设备树属性
| 属性 | 偏移 | 值 |
|---|---|---|
| `has-virtualization` | `0x3862c` | `1`(uint32) |
| `vm-reserve` | `0x1a960` | 基地址=`0x10000004000`,大小=`0x1000000c000`(约 1TB IPA) |
| `allow-vm-reserve-mapping` | `0x1aa8c` | 存在(空标志) |
`vm-reserve` 属性为 Stage-2 IPA(中间物理地址)空间分配了约 1TB 的虚拟地址范围。这是客户机虚拟机可见的地址空间。
---
## 架构
通过本分析重构的完整虚拟化栈:
```
┌────────────────────────────────────────────────────────────────┐
│ User Space │
│ ┌──────────────┐ │
│ │ Application │──── com.apple.private.hypervisor ───────┐ │
│ └──────────────┘ │ │
│ Hypervisor.framework │ │
│ hv_vm_create() │ │
│ hv_vcpu_run() │ │
├────────────────────────────────────────────────────────────┤ │
│ XNU Kernel (EL1) │ │
│ ┌─────────────────┐ ┌──────────────┐ ┌──────────────┐ │ │
│ │ hv_support_init │ │ hv_vcpu.c │ │ pmap.c │ │ │
│ │ kern.hv_vmm_ │ │ hv_vm_t │ │ PMAP_CREATE │ │ │
│ │ present = ? │ │ hv_nested_ │ │ _STAGE2 │ │ │
│ │ kern.hv_disable │ │ vm_t │ │ pmap->vmid │ │ │
│ └─────────────────┘ └──────┬───────┘ └──────┬───────┘ │ │
│ │ GENTER │ GENTER │ │
├──────────────────────────────┼─────────────────┼───────────┤ │
│ SPTM (GL2) │ │
│ ┌────────────────────────────────────────────────────────┐ │ │
│ │ bootstrap_determine_virtualization_support() │ │ │
│ │ → reads /product/has-virtualization from DT │ │ │
│ │ → stores to g_virtualization_supported (0x...dc40) │ │ │
│ ├────────────────────────────────────────────────────────┤ │ │
│ │ VM Dispatch (when flag = 1) │ │ │
│ │ ┌──────────────────┐ ┌────────────────────────────┐ │ │ │
│ │ │ sptm_guest_enter │ │ sptm_guest_va_to_ipa │ │ │ │
│ │ │ sptm_guest_exit │ │ sptm_guest_stage1_tlb_op │ │ │ │
│ │ │ sptm_guest_ │ │ acquire_stage2_root_pt │ │ │ │
│ │ │ dispatch │ │ sptm_vmid_bitmap │ │ │ │
│ │ └──────────────────┘ └────────────────────────────┘ │ │ │
│ ├────────────────────────────────────────────────────────┤ │ │
│ │ State Machine │ │ │
│ │ STATE_XNU_GUEST ←→ EVENT_ENTER/EXIT_GUEST │ │ │
│ └────────────────────────────────────────────────────────┘ │ │
├────────────────────────────────────────────────────────────┤ │
│ Hardware │ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────────┐ │ │
│ │ VTTBR_EL2 │ │ Stage-2 │ │ NV2 (Nested │ │ │
│ │ (per-VM) │ │ Page Tables │ │ Virtualization) │ │ │
│ └──────────────┘ └──────────────┘ └──────────────────┘ │ │
└────────────────────────────────────────────────────────────────┘
```
---
## 影响
### 1. 虚拟机监控程序已具备生产就绪性
这不是原型代码。字符串分析显示:
- **错误处理**:6 种 `VIOLATION_GUEST_*` 错误类型,带有具体消息
- **输入清洗**:对客户机状态和 Stage-2 根表地址的 `sanitize_integer()`
- **状态机**:完整的进入/退出生命周期
- **VMID 管理**:带冲突检测的位图分配器
- **嵌套虚拟化**:NV2 基地址验证
### 2. 可能的使用场景
苹果为何在消费级 iPhone 上启用虚拟机?
- **Exclaves**:iOS 26 引入了“exclaves”——可能使用虚拟机隔离作为底层机制。
- **安全容器**:隐私敏感操作可在硬件隔离的虚拟机中运行。
- **未来开发者功能**:苹果可能准备向 iOS 开放 Hypervisor.framework,使开发者能够使用基于虚拟机的开发工具。
- **代码签名强制执行**:虚拟机可用于动态代码分析的额外沙箱层。
### 3. 权限屏障
实际的障碍是 `com.apple.private.hypervisor` —— 一个**受限权限**,苹果不会授予第三方应用。然而:
- 在 **越狱设备** 上,AMFI 绕过可移除权限检查;
- 在 **SRD**(安全研究设备)上,可能提供扩展权限;
- 在 **macOS** 上,该权限对开发者开放(通过 Virtualization.framework);
- 未来 iOS SDK 更新可能公开该权限。
---
## 附录:完整数据表
### A. XNU 帧类型(来自 pmap.c 使用)
```
XNU_DEFAULT XNU_COMMPAGE_RO
XNU_COMMPAGE_RW XNU_COMMPAGE_RX
XNU_KERNEL_RESTRICTED XNU_PAGE_TABLE
XNU_PAGE_TABLE_COMMPAGE XNU_PAGE_TABLE_ROZONE
XNU_PAGE_TABLE_SHARED XNU_PROTECTED_IO
XNU_ROZONE XNU_SHARED_ROOT_TABLE
XNU_STAGE2_PAGE_TABLE ← XNU_STAGE2_ROOT_TABLE ←
XNU_SUBPAGE_USER_ROOT_TABLES XNU_USER_DEBUG
XNU_USER_EXEC XNU_USER_JIT
XNU_USER_ROOT_TABLE
```
### B. SPTM API 函数(来自 XNU 侧,pma.c 使用)
```
sptm_retype sptm_map_page sptm_map_table
sptm_unmap_region sptm_unmap_table sptm_update_region
sptm_configure_root sptm_switch_root sptm_nest_region
sptm_unnest_region sptm_surt_alloc sptm_surt_free
sptm_features_available sptm_sign_user_pointer sptm_auth_user_pointer
sptm_update_disjoint sptm_unmap_disjoint sptm_kvtophys
sptm_iofilter_protected_write ...
```
### C. PMAP_CREATE 标志(来自源码)
```
PMAP_CREATE_64BIT
PMAP_CREATE_STAGE2 ← Bit value redacted (likely 0x02)
PMAP_CREATE_DISABLE_JOP
PMAP_CREATE_FORCE_4K_PAGES
PMAP_CREATE_ROSETTA
PMAP_CREATE_TEST
PMAP_CREATE_NESTED = 0x80
```
### D. SPTM 二进制布局
```
Segment VA Range Size Contents
__TEXT 0xfffffff027004000–027018000 80 KB Strings, constants
__DATA_CONST 0xfffffff027018000–027020000 32 KB Read-only data
__LATE_CONST 0xfffffff027020000–027094000 464 KB Mutable-once data
__TEXT_EXEC 0xfffffff027094000–0270f0000 368 KB Code
__DATA 0xfffffff0270f4000–027104000 64 KB BSS, globals
__BOOTDATA 0xfffffff027104000–027118000 80 KB Boot-time data
g_virtualization_supported: 0xfffffff02708dc40 (__LATE_CONST)
```
### E. 验证命令
```
# Reproduce this analysis:
./ipsw download ipsw --device iPhone15,2 --latest --kernel -y
./ipsw download ipsw --device iPhone15,2 --latest --pattern 'sptm' -y
./ipsw download ipsw --device iPhone15,2 --latest --pattern 'DeviceTree' -y
./ipsw img4 im4p extract Firmware/sptm.t8120.release.im4p -o sptm.bin
./ipsw img4 im4p extract Firmware/all_flash/DeviceTree.d73ap.im4p -o dt.bin
# Check SPTM VM strings:
strings sptm.bin | grep -E 'guest|stage2|vmid|virtualization'
# Check DeviceTree:
strings dt.bin | grep 'has-virtualization'
# Check value (offset may vary per build):
python3 -c "
d=open('dt.bin','rb').read()
i=d.find(b'has-virtualization')
import struct
v=struct.unpack('
标签:A15, ARM64, Hypervisor, iOS 26, iOS安全, iOS虚拟化, iPhone 14 Pro, SPTM, XNU内核, 云安全监控, 云资产清单, 内核缓存, 固件分析, 嵌套虚拟化, 情报收集, 漏洞研究, 硬件虚拟化, 苹果安全, 苹果越狱, 设备树, 逆向工具, 逆向工程, 静态分析