虚拟化逆向(VT-x / SVM / 分区 hypervisor)
SkillDev tools虚拟化逆向:VT-x/SVM、hypervisor 检测、VMCS/EPT 分析, 以及 Xen / QNX Hypervisor / Jailhouse / ACRN / Bao / Hyper-V·VMBus / XtratuM / LynxSecure / Quest-V 的分区与 vdev 语义。 触发词:hypervisor、VT-x、SVM、虚拟化检测、EPT、Xen、grant table、event channel、 Jailhouse、cell、ACRN、ivshmem、Bao、shmem_id、vdev、GPA/HPA、 Hyper-V、VMBus、VSC、VSP、GPADL、SR-IOV、XtratuM、XM_CF、LynxSecure、Quest-V、sandbox kernel
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the 虚拟化逆向(VT-x / SVM / 分区 hypervisor) skill
What this skill tells your AI
The instructions your AI receives, as published by dslsdzc/rev-skills in .claude/skills/re-hypervisor/SKILL.md and read by ahel’s review.
- 轴 A:分析 hypervisor 本身(VT-x/SVM 指令、VMCS/VMCB、EPT/NPT)→ 本主文档
- 轴 B:目标处在某种虚拟化之下,判断"看到的地址/设备/中断是不是虚拟化层造出来的"→ 见 [[xen]] / [[qnx-hypervisor]] / [[jailhouse]] / [[acrn]] / [[bao]]
轴 B 的共同坑是把本地句柄当全局标识、把虚拟地址当物理地址:
grant ref 是 grant table 的条目索引 ≠ 物理地址
event-channel port 是通知端口 ≠ IRQ 号
guest BAR / GPA ≠ 物理 BAR / HPA
shmem_id 才是共享对象 identity ≠ 两个 VM 里的映射地址
</CORE RULE>
何时使用 / 何时不用
- 前置:先判是哪一类虚拟化(宿主厂商串 / 配置格式 / 结构性证据)→ [[re-analyze/system-fingerprints]] 的 Hypervisor 段
- 用:目标是 hypervisor / VMM 二进制或驱动(恶意 hypervisor、rootkit 虚拟化、VM-based 保护)
- 用:样本/程序检测自己是否运行在虚拟机或嵌套虚拟化中(CPUID 指纹、时序检测)
- 用:分析 VT-x(VMX)或 SVM 相关的启动代码、VMCS/VMCB 布局、EPT 相关操作
- 用:目标跑在分区/嵌入式 hypervisor 之下——PV 设备、静态分区、vdev、跨 VM 共享内存与虚拟中断(见下方分支)
- 不用:普通 Windows 驱动/rootkit(走 [[re-kernel]]);只要识别"我在不在 VM 里"(快速判断走 [[re-triage]] 思路或
virt-what) - 不用:无 CPU 虚拟化支持 / 无嵌套虚拟化环境时的动态验证(静态分析先行,见坑 1)
- 注意:动态实验(QEMU/KVM 嵌套)按 [[re-analyze/platform-tips]] 最高原则在沙箱内进行;hypervisor 样本具有高特权,只在与宿主隔离的实验环境运行
工具准备
静态分析(CPUID 检查 / 反编译)免沙箱;QEMU/KVM 动态实验属动态执行,默认沙箱 + 快照([[re-analyze/platform-tips]] 最高原则)。
CPUID 检查工具(hypervisor 识别)
- Linux 内置:
grep -E 'vmx|svm' /proc/cpuinfo——VT-x/SVM 支持标志(零安装,先用它) cpuid工具(dump 各 CPUID 叶子的完整输出):- Debian/Ubuntu:
apt install cpuid;Fedora:dnf install cpuid - Arch 无独立 cpuid 包 → 用
kcpuid(pacman -S kcpuid,linux-tools 组)或 libcpuid 附带的cpuid_tool(pacman -S libcpuid) - 验证:
cpuid -1输出含各叶子详情;cpuid -1 -l 0x40000000(hypervisor 厂商字符串叶子)
- Debian/Ubuntu:
- Windows 侧:WinDbg 内核调试下
!cpuid([[re-windbg]] 扩展命令)
QEMU / KVM —— 嵌套虚拟化实验环境
- Debian/Ubuntu:
apt install qemu-system-x86(Debian 12+ 已移除 qemu-kvm 过渡包,直接装 qemu-system-x86 即含qemu-system-x86_64;Ubuntu 的 qemu-kvm 过渡包仍存在,装了等价于 qemu-system-x86;Ubuntu 另加libvirt-daemon-system) - Fedora:
dnf install qemu-system-x86-core libvirt virt-install(或dnf group install virtualization) - Arch:
pacman -S qemu-system-x86 libvirt virt-manager(启用systemctl enable --now libvirtd) - macOS:
brew install qemu(无 KVM,用 HVF) - 验证:
qemu-system-x86_64 --version;ls /dev/kvm(KVM 加速可用);kvm-ok(Debian/Ubuntu 专用,来自 cpu-checker 包——先apt install cpu-checker)
反编译工作台([[re-ghidra]] / [[re-ida]])
- [[re-ghidra]](默认)/ [[re-ida]]:导入 hypervisor 二进制(内核模块 / 裸二进制)
- 验证: 导入后能反编译出 VMXON / VMPTRLD / VMREAD / VMWRITE 调用点
Intel SDM / AMD APM(VMCS 字段编码参考,无安装)
- Intel SDM Volume 3C 附录 B(VMCS field encoding 表);AMD APM Volume 2(VMCB 布局)
- 用途: VMREAD/VMWRITE 操作数解码、exit reason 编号对照(无独立包,官方文档)
操作步骤
按顺序执行,每步产物(CPUID 输出、VMCS 字段表、QEMU 配置)记录证据路径 + sha256(见 [[re-triage]]),供报告引用。
-
hypervisor 识别(CPUID 叶子 / VMX 标志):
grep -E 'vmx|svm' /proc/cpuinfo | head -1 # 宿主 CPU 虚拟化支持 cpuid -1 -l 0x1 | grep -i -A1 'hypervisor' # CPUID.1:ECX[31] hypervisor present bit cpuid -1 -l 0x40000000 # 0x40000000 叶子的 hypervisor 厂商字符串 # "KVMKVMKVM" = KVM、"Microsoft Hv" = Hyper-V、"VMwareVMware" = VMware、"XenVMMXenVMM" = Xen- 检测要点:hypervisor present bit(CPUID.1:ECX[31])→ 有 hypervisor;
0x40000000返回厂商字符串(12 字符按序分布在 EBX:ECX:EDX 各 4 字节,EAX 返回最大 hypervisor 叶子号) - 恶意样本常在启动早期做此检测决定后续行为([[re-evasion]] 联动,见坑 5)
- 记录:宿主支持情况(vmx/svm)、是否已在 VM 内(含嵌套,坑 4)
- 检测要点:hypervisor present bit(CPUID.1:ECX[31])→ 有 hypervisor;
-
VMCS 结构分析(VT-x):
- 启动路径:
VMXON(进入 VMX 操作模式)→VMPTRLD(加载当前 VMCS)→ 配置 VMCS 字段 →VMLAUNCH/VMRESUME(进 guest)→ VM exit 后查VM_EXIT_REASON字段分派 - 反编译定位:搜
VMXON/VMPTRLD/VMWRITE/VMREAD/VMLAUNCH指令(Ghidra 反汇编直接可读);VMCS 区域是内存块,先找 VMCS 缓冲区分配与初始化代码 - VMREAD/VMWRITE 的操作数是 VMCS 字段编码(32 位,Intel SDM 附录 B 表 B-1~B-4):bit0 = 访问类型(0=full field、1=high 32 bits);索引在 bits 9:1(9 位,不是 bits 9:0);类型在 bits 11:10(00=control、01=read-only、10=guest-state、11=host-state);宽度在 bits 14:13(00=16 位、01=64 位、10=32 位、11=natural);bit 12 与 bits 31:15 保留(必须为 0)。解码示例:0x400C=VM-exit controls(32 位,bits 14:13=10)、0x2000=I/O bitmap A(64 位,bits 14:13=01)、0x681E=GUEST_RIP(natural,bits 14:13=11)、0x681C=GUEST_RSP(natural)、0x4402=VM-exit reason(32 位 read-only)——即
access=enc&1; index=(enc>>1)&0x1ff; type=(enc>>10)&3; width=(enc>>13)&3,在 Ghidra/IDA 里建枚举/结构标注 - 关注三块:guest-state(保存 guest 寄存器/CR3/RSP)、host-state(VM exit 后宿主现场)、control 字段(execution control 决定哪些事件触发 VM exit)
- SVM 对应:VMCB(物理地址经
VM_HSAVE_PAMSR),字段是固定偏移——按 AMD APM 布局标注 - 产物:VMCS 字段标注表(编码 → 字段名 → 作用)+ 初始化/exit 处理流程
- 启动路径:
-
虚拟化技术检测对抗(EPT 隐藏内存):
- EPT(Extended Page Tables):guest 物理地址 → 宿主物理地址的第二层页表(VMM 控制);恶意 hypervisor 可用 EPT 把同一 guest 页映射到不同宿主页、或在 EPT 层面修改页内容而 guest 页表看起来不变
- 分析思路:反编译里找 EPT 相关操作——
INVEPT/INVVPID(TLB 失效)使用点、EPT 指针字段(VMCSEPTP)赋值、EPT 页表构建函数(从 EPT 指针沿页表结构走) - 检测对抗的观察法:guest 内看到的内存内容与宿主侧直接读同一物理页不一致 → EPT 重映射证据(两个视图对照);[[re-kernel]] 内核调试配合在宿主与 guest 两侧各 dump 同一页
- EPT Hook 双视图机制(无痕 hook 核心):同一 GPA 准备两个 HPA——原始页(RW/NX)与影子页(X-only 或补丁代码)——数据访问映射原始页、指令取指映射影子页;CPU 取指触发 Execute Violation(VM-exit reason 48)后在 VM-exit 里切影子页并 INVEPT 失效缓存;扫描器/CRC 读地址得到干净字节,执行却是补丁代码(读侧无痕)
- EPT 无痕 INT3:只在影子页放
0xCC,原始数据页不变——读内存看到原指令、取指却断下;VMCS Exception Bitmap 拦截向量 3 后匹配地址用guest_rip - 1(一字节 INT3 的 RIP 在断点字节之后);处理完单步恢复再重新布断点;非本框架的 #BP 必须 reinject 回 guest(不能吞其他调试器/系统断点) - MTF(Monitor Trap Flag)解决"读执行同页":影子页指令若读取同页常量(取指要影子页、数据要原始页冲突)→ 临时放开原始页执行并置 MTF,CPU 单步执行一条指令后在 MTF VM-exit 里收紧权限;MTF 是 VM-execution control,不动 guest RFLAGS.TF、不占 DR0-DR7
- EPT 监视 = 模拟无限硬件断点:DR0-DR3 仅 4 槽,EPT 监视撤销目标页 R/W/X 权限让匹配访问 VM-exit,数量仅受内存/性能限制;硬件断点类需求(含与传统调试器互通,如 hook
SetThreadContext探测是否下硬件断点再转发到 EPT 监视)用这套替代 - VMCALL 无痕通信:guest 执行 VMCALL 产生 VM-exit reason 18(不调用 guest 内任何地址),RAX 放协议标识、RCX 放操作号、其余寄存器传参,是 hypervisor 与 guest 的私有通信通道
- 产物:EPT 构建/切换代码路径 + 内存视图差异证据
-
嵌套虚拟化(VMM 内调试):
# KVM 开启嵌套(宿主)——module_param 权限为 0444,sysfs 只读,echo 写入会失败 sudo modprobe -r kvm_intel && sudo modprobe kvm_intel nested=1 # Intel(AMD 用 kvm_amd nested=1) # 持久化:/etc/modprobe.d/kvm.conf 写 `options kvm_intel nested=1`(重启后仍生效) cat /sys/module/kvm_intel/parameters/nested # 验证(Y/1 为已开启) # QEMU 启动带 VT-x 透传的嵌套 VM(`-cpu host` 暴露 vmx 标志) qemu-system-x86_64 -enable-kvm -cpu host,+vmx -m 4096 disk.img & # 嵌套 VM 内再验证: grep vmx /proc/cpuinfo 可见 → 可在此跑 hypervisor 样本- 用法:宿主上的调试器(gdb/lldb 或 [[re-windbg]] 内核调试)直接观察嵌套 VM 内 hypervisor 的执行——样本以为自己在最底层,实际仍在宿主调试视野内
- VMware/Hyper-V 同理(虚拟机设置里开"虚拟化引擎/嵌套虚拟化")
- 产物:嵌套配置存档 + 调试会话记录
-
反虚拟化绕过([[re-evasion]] 联动):
- 识别检测手段:CPUID 厂商字符串(步骤 1)、时序(RDTSC 指令耗时)、设备名(VM 虚拟设备)、固件/ACPI 特征
- 按 [[re-evasion]] 的"规避识别→绕过点定位"框架:hook CPUID(cpuid 是指令而非导出符号,
findExportByName拿不到——改 hook libc 导出函数__get_cpuid/__get_cpuid_max改返回值,或 Stalker 指令级追踪拦截 cpuid 指令;内核侧 hook/patch 指令)、QEMU-cpu参数伪造厂商字符串、设备名改名 - 恶意样本"检测到 VM 就改变行为"(不执行恶意逻辑)也是常见对抗——记录检测点与分支
- 产物:检测点清单 + 绕过方案(授权研究场景)
平台分支(references)
轴 B:目标是"跑在某种虚拟化之下的系统",要判断哪些现象是虚拟化层造出来的正常机制。
- [[xen]] —— PV 前后端四件套(XenStore / grant table / shared ring / event channel);grant ref 是条目索引(条目含 flags/domid/frame,且映射期间不支持撤销);event-channel port 不是 IRQ 号(绑定到
shared_info位掩码);迁移后本地端口会变、稳定的是 remote port;shared ring 上"有数据流动却无 IPC 调用"属正常 - [[qnx-hypervisor]] —— 三层地址(guest virtual → guest physical/IPA → host physical);vdev 使 guest DT ≠ 板级 DT;shmem vdev 的工厂页(
name/size/shmem/vector/status,写size触发创建,故 guest 启动顺序无关)与控制页(status/idx/notify/detach);intr passvsintr vdev;直通设备同一时刻只允许一个 resident - [[jailhouse]] —— 配置比 inmate ELF 更重要(CPU/内存/IRQ/PCI 归属);越权访问 → CPU 被 park(不是 guest 崩溃);
JAILHOUSE_MEM_LOADABLE映射在 cell 启动时被撤销(重装走 Cell Set Loadable);ivshmem 不维护 pending 语义(MSI-X PBA 恒 0,事件状态从共享内存协议读);hypervisor VA 里扫不到全部 VM 内存 - [[acrn]] —— Service VM / pre-launched / post-launched 三态与三种 I/O 服务路径;guest BAR ≠ 物理 BAR(EPT 映射,MSI-X 表页必须 trap);posted interrupt 使 VM-exit 减少;ivshmem 的 dm-land 与 hv-land 永不互通(前缀
dm:/vshv:/,且 dm-land 无 doorbell) - [[bao]] —— 静态分区(CPU/内存/中断独占,vCPU 与 pCPU 1:1,无调度器);共享对象 identity 是
shmem_id而非地址;IPC 的size ≤ 对应 shmem 大小;cache coloring 抑制干扰但有代价(牺牲大页、增加 TLB 压力)且随平台颜色数截断 - [[hyperv-vmbus]] —— VSC / VSP 经 VMBus(双向通道 = 两个 ring buffer;高速设备可用多通道);GPADL 是缓冲区描述句柄不是地址(共享总量有上限);SR-IOV 让数据面中途换路(VF 直通绕开 VMBus 与 hypervisor,控制面仍在 VMBus)
- [[xtratum]] —— XM_CF 配置驱动(分区/内存/中断/端口/通道/调度全在配置里,运行期无动态对象);循环计划(MAF + 时间槽)与固定优先级计划;Plan 0 = 初始化、Plan 1 = 维护,切换要等当前计划剩余槽跑完;IPVI 每分区最多 8 个
- [[lynxsecure]] —— 静态分离内核:boot 时定义、不可变的硬件分区;内核功能仅限资源分区 / 控制分区之间的数据流 / 调解系统状态变更入口;I/O 与应用支持全部导出到 guest(内核里没有驱动与 I/O 栈)。含逆向可操作层:配置优先于代码、启动阶段是唯一能看到"配置生效"的窗口、用三项职责反查内核边界、跨分区找受控通道而非共享页、用官方约束验证 DMA/hypervisor 与 guest 的隔离
- [[questv]] —— 多内核 sandbox + 每 sandbox 一个 monitor:monitor 只在引导/故障/影子页表/建通道时介入;EPT 用于内存隔离而非 CPU 虚拟化;中断直接投递 sandbox;EPT violation → VM-exit 到对应 monitor(必要时强制触发陷入);本地/远程在线恢复;无全局时钟。含"哪一段是 monitor"的定位判据
跨域联合
- [[re-evasion]]:反虚拟化检测/绕过框架(CPUID hook、时序对抗);恶意样本 VM 检测行为分析
- [[re-kernel]]:hypervisor 驱动/内核模块分析底座(DriverEntry、IRP、内核调试配合)
- [[re-windbg]]:Windows 宿主/guest 内核调试(
!cpuid查 CPUID 叶子、驱动加载观察) - [[re-ghidra]] / [[re-ida]]:VMCS/VMCB 相关代码反编译与结构标注(SDM 附录 B 建枚举)
- [[re-sandbox]] / [[re-analyze/platform-tips]]:QEMU/KVM 实验环境隔离最高原则;嵌套 VM 是默认沙箱形态
- [[re-triage]]:初勘阶段"是否在 VM 内 / CPU 虚拟化能力"快速判断(
virt-what思路)
常见坑与陷阱
- 硬件虚拟化调试环境复杂:现象——hypervisor 样本在普通 VM 里跑不起来/直接崩溃,调试器附加失败,样本检测到嵌套环境后行为异常;原因——嵌套虚拟化需要宿主 CPU 支持 + 显式开启(KVM nested / Hyper-V / VMware 选项),且样本会检测自己是否"真的在底层";对策——先纯静态积累信息(步骤 1-2 的 CPUID 与 VMCS 分析不需要跑样本),动态前确认三层能力:宿主 vmx/svm 标志(
grep vmx /proc/cpuinfo)→ 嵌套开关(/sys/module/kvm_intel/parameters/nested)→ QEMU-cpu host透传;实验全部在隔离沙箱([[re-analyze/platform-tips]] 最高原则) - VMCS 内核对象逆向门槛高:现象——反编译里 VMREAD/VMWRITE 一堆魔数,不知道读写的是什么字段,VM exit 分派逻辑看不懂;原因——VMCS 是硬件定义格式(字段编码不是符号),且各 CPU 架构(VT-x vs SVM)布局完全不同;对策——把 Intel SDM 附录 B 的字段编码表建进反编译器(Ghidra 枚举/结构),VMREAD/VMWRITE 操作数逐一解码;按 guest-state / host-state / control 三块组织分析;AMD 目标改用 VMCB 固定偏移布局(APM Volume 2)
- EPT 使内存断点失效:现象——调试器在 guest 里下的内存断点/页保护断点不触发或触发后行为诡异(寄存器对不上);原因——EPT 的访问位/脏位独立于 guest 页表,VMM 通过 EPT 控制 guest 看到的内存视图(含隐藏页),普通调试器断点基于 guest 页表视角;对策——区分 EPT violation(VM exit reason 48)与 guest page fault(reason 14);要观察 EPT 层必须看 EPT 页表结构本身(沿 VMCS EPTP 字段展开)而不是 guest 页表;[[re-kernel]] 内核调试下对照宿主/guest 两侧内存视图
- CPU 特性差异(VT-x vs SVM):现象——在 Intel 机器上整理的 VMCS 偏移/exit reason 编号拿到 AMD 机器全对不上,或相反;原因——VT-x 与 SVM 是两套独立实现:VMCS(VMREAD/VMWRITE 编码)vs VMCB(固定偏移),exit reason 编号体系不同;对策——先确认目标平台(CPUID vendor + vmx/svm 标志,步骤 1),按平台选对应手册(Intel SDM Vol 3C / AMD APM Vol 2),分析笔记标注目标平台与 CPU 型号,不跨平台复用字段表
- 样本检测 VM 后改变行为(影响结论):现象——静态分析很清晰的恶意逻辑,动态运行时完全看不到(样本"正常"运行);原因——样本检测到自己在 VM/调试环境里会走"无害分支"(反沙箱/反调试常见手法);对策——按步骤 1 先确定样本视角的虚拟化状态,动态验证必须与样本检测条件一致(或逐项绕过检测);结论以"检测点还原 + 绕过后的行为"为准,单跑一遍就下结论不可信
- AMD NPT 不能照搬 EPT 方案:现象——Intel 上可用的"只执行页"技巧(影子页 X-only)在 AMD 平台失效;原因——NPT 与 EPT 是两套独立实现,NPT 不能单独设置只执行属性(读与执行位绑定);对策——跨平台实现 hook/隐藏前先确认目标是 Intel(EPT)还是 AMD(NPT),AMD 需换用其他手段(如结合 NX + 数据视图)
- "VT 无痕读写"是伪命题:现象——以为 EPT 能无痕读写任意数据段;原因——影子页表只能无痕改写"代码段"(取指视图切换),数据段无法同时满足两侧视图(读原始 vs 写影子);对策——无痕写仅限代码段场景(hook 场景);数据段读取仍靠遍历四级页表(GVA→GPA→HPA 二阶段翻译)直读物理页,与普通驱动思路无本质区别
- RDTSC 检测 VM-exit 开销可被补偿:现象——样本用
__rdtsc/__rdtscp测指令耗时差值识别 hypervisor;原因——VM-exit 有固定开销可测量;对策——VM-exit 汇编入口最早记录exit_tsc,ReadVirtualTsc用有界平滑估计补偿(不能把中断/调度长尾全当 exit 成本),并保证每 vCPU 单调(max(value, last_guest_tsc+1));原则:样本检测哪里,就在 VM-exit 里处理哪里 - 把跨 VM 的本地句柄当全局标识:现象——trace 里同一个整数在两个域/VM 里出现,被当成同一个对象;原因——grant ref 是条目索引、event-channel port 是通知端口、shmem_id 才是共享对象 identity,本地端口在重连后还会变且可被重用;对策——按各自的表/配置对齐(grant table 条目、shared_info 位掩码、shmem_id),见 [[xen]] / [[bao]]
- 把虚拟地址当物理地址:现象——guest 里的 MMIO 地址在真实硬件上找不到对应,就判驱动写错或抓错设备;原因——PV 设备没有寄存器窗口;分区 hypervisor 下 guest 的 BAR/GPA 与物理 BAR/HPA 之间隔着 EPT/NPT 或直通映射;vdev 的地址由配置制造;对策——先判"直通还是 vdev/模拟",再谈地址是否一致,见 [[qnx-hypervisor]] / [[acrn]] / [[jailhouse]]
- 把 hypervisor 的保护动作当 guest 崩溃:现象——程序在访问某地址后"突然停住",却找不到常规缺页/总线错误证据;原因——静态分区 hypervisor 会把越权访问的 CPU/cell park 掉(Jailhouse);对策——查 hypervisor 侧日志(Unhandled trap / Parking CPU),并对照 cell/VM 配置的资源归属([[jailhouse]])
- 跨 VM 共享内存通不了就往设备模型里找:现象——两侧 ivshmem 都"正常"但完全无法通信;原因——ACRN 的 dm-land 与 hv-land 是两套实现,前缀(
dm:/与hv:/)不同则永不互通,且 dm-land 没有 doorbell 通知;对策——先核对实现与前缀是否一致,再看数据面([[acrn]]) - 把 GPADL 之类的描述符当内存地址:现象——trace 里的小整数被当地址或偏移参与推算;原因——GPADL 是"描述并映射一片客户机缓冲区"的句柄,且宿主对其共享总量有限制;对策——按句柄语义还原它指向的缓冲区([[hyperv-vmbus]])
- 网络流量中途"消失"却功能正常:现象——一段时间 VMBus 很忙,之后抓不到包但网络仍通;原因——SR-IOV 下数据面可从合成路径切到 VF 直通(数据面绕开 VMBus 与 hypervisor,控制面仍在 VMBus);对策——先判当前数据面走哪条路径([[hyperv-vmbus]])
- 没拿到配置文件就分析资源归属:现象——找不到"为什么这个分区访问不到"的答案;原因——配置驱动的分离系统(XtratuM、LynxSecure、Jailhouse、Bao 等)把资源归属全放在配置里;对策——先取配置,再谈代码([[xtratum]] / [[lynxsecure]])
- 把"缺少集中管理代码/VM-exit 很少"当没有隔离:现象——反汇编里找不到中央调度或重配置逻辑;原因——静态配置模型与多内核 sandbox 本来就不这么做;对策——按该系统的模型解释([[lynxsecure]] / [[questv]])
- 跨 sandbox 比较时间戳:现象——同一次事件在两侧的时间对不上;原因——某些多内核设计没有全局时钟,各核用本地定时器与 TSC;对策——把时钟偏差算进去,别按单一时间线断言([[questv]])
- 在内核区域里期待驱动与 I/O 栈:现象——某个映像块里应有尽有(驱动、I/O、应用 API),却被当作内核;原因——极端的静态分离设计把 I/O 与应用支持全部导出到 guest,内核只做资源分区/数据流控制/状态变更调解;对策——用这三项职责反查真正的内核边界([[lynxsecure]])
- 在运行期找"重配置"逻辑:现象——找不到动态 MMU/资源重配置引擎;原因——静态配置模型下映射与归属都在启动期确定;对策——把追映射的工作放到启动阶段([[lynxsecure]])
Signals
- GitHub stars
- 57
- Forks
- 8
- Last commit
- Sep 2026
ahel review
K1binfo
installs-packages
Automated review, not a security audit. Ruleset v1+k2.
Advanced
- Catalog kind
- skill
- Gateway key
re-hypervisor- Source
- github.com/dslsdzc/rev-skills