使用 C 和 x64 汇编实现 Intel VT-x 虚拟化、EPT 挂钩与交互式内核遥测。
Velum 将正在运行的 Windows 内核带入 VMX 非根操作模式,并为研究人员提供一种交互式方式来观察本机调用、检查内核活动并应用请求策略。其 EPT 挂钩在硬件中重放原始指令,而客户机辅助程序负责捕获元数据,并由延迟工作线程将可读事件传递到控制台或 DebugView。
使用它可以追踪一次文件操作从输入参数到策略决策的全过程,比较被允许的请求与被拒绝的请求,或者在不重启虚拟机监控器的情况下探索处理器标识与计时设置。该实现包括按 CPU 的启动与关闭、CET 状态传递、事件重新注入以及转换缓存管理。
开始使用 | 使用指南 | 技术文章 | 运行时捕获 | MIT 许可证
| 领域 | 你可以做什么 |
|---|---|
| EPT 挂钩 | 通过原始指令重放和 MTF 恢复来启用和禁用导出入口挂钩 |
| 本机调用遥测 | 检查调用方 ID、路径、进程元数据和已解码的输入参数 |
| 请求策略 | 使用调用方、路径和输入字段条件拒绝匹配的 Nt 请求 |
| 权限削减 | 移除 NtCreateFile、NtOpenFile、NtCreateSection、NtOpenProcess 和 NtDuplicateObject 的显式请求权限 |
| 内核观察 | 跟踪池分配/释放、内存映射和复制输入;检查模块/标签摘要 |
| 日志记录 | 选择实时控制台或 DebugView 输出,并配置按目标的过滤器 |
| CPUID | 应用和查询标识规则,然后恢复默认值 |
| TSC | 应用带截止时间转换的固定有符号偏移,并重置为零 |
| 生命周期 | 检查每个参与的 CPU,并通过关闭流程将 Windows 恢复到本机执行 |
目标目录包含 12 个 Nt 例程和 12 个 Ex/Mm 例程。控制台会在正在运行的内核上解析可用的导出和共享入口地址。有关每个目标的字段和支持的操作,请参阅目标索引。
运行时围绕显式状态所有权和精简的 VM-exit 路径进行优化。约 1,000 行的 x64 汇编层负责寄存器保存、VMX 转换、CET 状态传递和本机返回。按 CPU 的结构和预分配的 EPT 保留区使分配操作远离退出路径;事件格式化在延迟的 PASSIVE 级工作线程中运行。发布版本使用编译器优化,而选择性拦截避免不必要地捕获普通操作。
根处理程序管理 VMCS 和 EPT 转换。符合条件的客户机辅助程序在 Windows 上下文中捕获参数并评估策略。格式化稍后在排空工作线程中运行。被允许的调用在临时 EPT 映射下执行其原始入口指令;MTF 返回控制权以恢复影子。被拒绝的调用使用真实的客户机返回,使普通栈和 CET 影子栈一起推进。
如需深入了解,请阅读 Velum:在 VMX 转换期间保持 Windows 执行。 该文章结合源代码讲解了 VMX 启动、VMCS 控制、EPT 挂钩、CET、NMI/事件处理、遥测和关闭流程。它包含来自 Windows 10 调查的 WinDbg 证据,并解释了 ExFreePool/ExFreePoolWithTag 别名修复。较短的工程笔记总结了这些决策。
以下捕获来自一台搭载 Intel i7-12700F(20 个逻辑处理器)的物理 Windows 11 build 26300.9711 会话。该会话包含 20/20 项 CPU 诊断检查、限定范围的文件写入拒绝、访问权限缩减、处理器配置以及已验证的关机。完整图库与动画 | 会话详情与哈希。
在一个控制台中启用钩子、配置策略、检查 CPU 状态并管理运行时。

一个受控的六字节 NtWriteFile 请求,包含其调用方、路径和输入字段。

请求的访问权限 0x12019F 在移除掩码 0x6 后变为 0x120199。打开操作成功,且探测确认生成的句柄无法写入。此标注合成图将监控输出与应用程序的结果配对展示。



下载适用于 Windows x64 的 v0.1.0(ZIP) | 发行说明与 SHA-256 校验和
该 ZIP 包含 velum.sys 和 velum-console.exe。在加载驱动之前,请遵循下方的设置指南,或从源代码构建:
安装 Visual Studio 2022 或 2026 及 C++ x64 工具,并搭配相应的 Windows SDK 和 WDK。build.bat 会自动发现已安装的工具;VS_PATH、WDK_ROOT 和 WDK_VER 允许显式指定。有关套件兼容性和本地已验证配置,请参阅构建要求。
build.bat check
build.bat
默认的优化 Release 构建会生成 x64/Release/velum.sys 和
x64/Release/velum-console.exe,不包含 PE 调试目录或 PDB 输出。
build.bat diagnostic 是显式选择启用,用于生成单独的诊断二进制文件和符号。
运行时遥测在 Release 中仍然可用。生成的输出保留在 Git 之外。
安装指南涵盖了临时 F7 加载、安装、 Intel VT-x/EPT 要求、来宾 Hyper-V/VBS 设置以及经过测试的 VMware 配置。 加载准备好的驱动程序后,以管理员身份运行匹配的控制台:
velum-console.exe
velum-console.exe status
velum-console.exe remove
从一个钩子和一个受控工作负载开始。使用 remove 执行关闭和服务移除流程;关闭控制台会使运行时保持安装状态。
已在 Windows 10 22H2 和 Windows 11 26H2 上测试,包括全钩子运行以及 VMware 中的启动/关闭。物理 Windows 11 捕获会话通过了 20/20 每 CPU 诊断,并演示了文件写入拒绝、访问缩减、CPUID 应用/重置、TSC 配置以及经验证的原生返回。
开发回归结果包括 8,272 项主机检查和 1,936 项模拟 VM-exit 事件检查。技术说明解释了测试工作负载、结果和配置细节。
hypervisor/ Kernel C, assembly and per-CPU runtime
user-mode/ Interactive control console
shared/ Protocols, field schemas and policy helpers
readmes/ Setup, usage guides and technical articles
assets/ Runtime screenshots, animations and capture metadata
build.bat Source-build entry point
LICENSE MIT License
有关报告,请参阅 SECURITY.md。参考资料: Intel SDM、 Windows 驱动程序文档, 以及 PHNT 原生定义。