NovaHypervisor 是一个基于 x64 Intel 主机的防御性虚拟机监控器。该项目的目标是通过保护防御产品(防病毒/端点防护)和内核内存结构,并防止未经授权的内核内存访问,来抵御基于内核的攻击(无论是通过“自带易受攻击驱动”(BYOVD)还是其他方式)。
NovaHypervisor 使用 C++ 和汇编编写,设计兼容 Windows 10 及更高版本。有关如何使用它的更多信息,请参阅设置部分。
[!重要]
该虚拟机监控器已在 Windows 11 25H2 和多个 Windows 10 版本上测试过。 如果遇到问题,请在检查是否已有未解决的 issue 后,新建一个 issue。
NovaHypervisor 可在以下虚拟机监控器下运行:
✅ - 已支持并测试
⌛ - 开发中
❌ - 不支持且不计划支持
| 虚拟机监控器 | 支持情况 |
|---|---|
| VMware | ✅ |
| Hyper-V | ✅ |
| 启用了 VBS 的 Hyper-V | ⌛ |
| VirtualBox | ❌ |
| QEMU | ❌ |
| KVM | ❌ |
要使用 NovaHypervisor,您需要创建一个内核服务并启动它:
sc create NovaHypervisor type= kernel binPath= "C:\Path\To\NovaHypervisor.sys"
sc start NovaHypervisor
然后,您可以使用 NovaClient 应用程序添加和删除要保护的地址:
REM 添加要保护的地址
NovaClient.exe protect 0x12345678 <r|w|x> <execution hook>
REM 移除地址的保护
NovaClient.exe unprotect 0x12345678
protect: 保护一个内存地址不被访问,您可以指定保护类型:
r: 读保护w: 写保护x: 执行保护
您指定的保护是指该地址将具有的保护。例如,如果您想移除执行权限,请使用 "rw"。unprotect: 移除对内存地址的保护。
[!注意] 通过内联钩子 + EPT 钩子进行的执行钩子不受支持,并且为了防范滥用,本项目不会支持。
编译项目需要您具备:
要运行虚拟机监控器,您的机器上需要安装 Windows 10 或更高版本。您还需要具备:
NovaHypervisor 使用一个小型 COM 记录器,该记录器可以在 HIGH_LEVEL IRQL 和 VMX root 路径下运行,并通过第二个串行端口(COM2,I/O 端口 0x2F8)记录日志。它输出带有固定前缀 NovaHypervisor 的调试、信息和错误记录。
bcdedit /dbgsettings serial debugport:2 baudrate:115200
从主机端的串行管道或虚拟机配置的 COM2 端点以 115200 8N1 设置捕获输出。例如,在 PuTTY 中,您可以连接到为虚拟机配置的串行传输,并在驱动程序运行时观察日志行。您也可以使用 connect-vm.ps1 脚本连接到虚拟机的 COM2 端口并在控制台显示日志。
要在测试环境中测试和调试它,请以管理员身份运行以下命令,然后重新启动您的机器:
bcdedit /set testsigning on
bcdedit /debug on
bcdedit /dbgsettings net hostip:<主机IP> port:55000 key:1.2.3.4
其中 <主机IP> 是您主机机器的 IP 地址。