Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
illusion-rs — Rusty Hypervisor - 基于 Rust 的 Windows UEFI 蓝药丸 Type-1 虚拟机监控程序(代号:Illusion) | Kitploit
工具/GitHubGitHub/memn0ps/illusion-rs
防御工具内存取证持久化机制逆向工程安全虚拟化恶意软件分析硬件安全二进制分析论文与研究红队Archived
GitHub
413604个月前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
memn0ps/illusion-rs

illusion-rs

Rusty Hypervisor - 基于 Rust 的 Windows UEFI 蓝药丸 Type-1 虚拟机监控程序(代号:Illusion)

查看仓库网站

Windows UEFI Blue Pill Type-1 虚拟机监控程序(Rust 实现,代号:Illusion)

License Issues Forks Stars

博客:https://memn0ps.github.io/hypervisors-for-memory-introspection-and-reverse-engineering/

一个轻量级、内存安全且速度极快的基于 Rust 的 type-1 研究型虚拟机监控程序,带有 Intel VT-x 钩子,专注于研究虚拟化的核心概念。

注意: Illusion 虚拟机监控程序(Windows UEFI Blue Pill Type-1 虚拟机监控程序,Rust 实现)更加稳定,支持更多功能,整体设计也更好。Matrix 虚拟机监控程序(Windows 内核 Blue Pill Type-2 虚拟机监控程序,Rust 实现)是一个较旧的实验性版本,不适用于生产环境。这两个项目都作为模板,帮助人们开始使用 Rust 进行虚拟机监控程序开发。

描述

分页:将 x64 虚拟地址转换为物理地址

此图展示了传统分页系统中将 x64 虚拟地址转换为物理地址的机制。在 x64 架构中,此转换涉及四级页表:PML4、PDPT、PDT 和 PT(页映射级别 4、页目录指针表、页目录表和页表)。每一级使用虚拟地址的 9 位来索引下一级,最终指向 RAM 中的特定物理地址。此过程由操作系统和内存管理单元(MMU)管理,MMU 将软件使用的虚拟地址转换为硬件使用的物理地址。

x64 虚拟地址转换
图 1:x64 虚拟地址转换(完整致谢:Guided Hacking)

扩展页表(EPT):二级地址转换(SLAT)

扩展页表(EPT)是硬件辅助虚拟化技术(如 Intel VT-x 和 AMD-V 的嵌套页表(NPT))的一项功能。EPT 实现了二级地址转换(SLAT),专为虚拟化环境设计。传统分页在客户机操作系统内将虚拟地址转换为物理地址,而 EPT 增加了一个额外的层,将客户机物理地址(客户机操作系统使用)转换为主机物理地址(虚拟机监控程序使用)。这第二层转换由虚拟机监控程序管理,允许客户机操作系统独立管理自己的页表。SLAT 通过最小化内存操作期间 VM 退出的需求来提高性能,从而减少开销并增强虚拟化效率。

下图展示了如何在用 Rust 编写的 Windows UEFI Blue Pill Type-1 虚拟机监控程序(代号:Illusion)中实现隐藏的 EPT 钩子。

EPT 钩子
图 2:扩展页表(EPT)钩子(Illusion)

功能特性

PatchGuard 兼容特性

  • ✅ 通过系统服务描述符表(SSDT)实现隐藏的系统调用(Syscall)钩子。
  • ✅ 隐藏的内核内联钩子。
  • ✅ 隐藏的模型特定寄存器(MSR)钩子。

处理器特定特性

  • ✅ 扩展页表(EPT)。
  • ✅ 内存类型范围寄存器(MTRRs)。
  • ❌ Intel 处理器追踪(PT)。

Microsoft Hyper-V 兼容特性

  • ❌ 支持在启用基于虚拟化的安全(VBS)的 Microsoft Hyper-V(Type-2)下作为嵌套虚拟机监控程序运行。
  • ❌ 支持在启用基于虚拟化的安全(VBS)的 Microsoft Hyper-V(Type-1)之上作为主虚拟机监控程序运行。

VM 退出处理

  • ✅ VM 退出处理:ExceptionOrNmi (#GP, #PF, #BP, #UD) (0)、InitSignal (3)、StartupIpi (4)、Cpuid (10)、Getsec (11)、Hlt (12)、Invd (13)、Vmcall (18)、Vmclear (19)、Vmlaunch (20)、Vmptrld (21)、Vmptrst (22)、Vmresume (24)、Vmxon (27)、Vmxoff (26)、ControlRegisterAccesses (28)、Rdmsr (31)、Wrmsr (32)、MonitorTrapFlag (37)、Rdtsc (49)、EptViolation (48)、EptMisconfiguration (50)、Invept (53)、Invvpid (55)、Xsetbv (55)。

虚拟机监控程序检测

  • ✅ 使用 EPT 向客户机隐藏虚拟机监控程序内存(将指向主机内存的客户机内存重定向到填充 0xFF 的虚拟页)。
  • ✅ 基于自定义页表的虚拟机监控程序检测绕过(提供与客户机的隔离和安全性,包括 CR3 破坏)。
  • ✅ 基于自定义 GDT 和 IDT 的虚拟机监控程序检测绕过(确保与客户机的隔离和安全性)。
  • ✅ 基于 CPUID 的虚拟机监控程序检测绕过(取消设置 HypervisorPresent 并移除功能信息和虚拟机监控程序供应商的供应商 ID 签名)。
  • ✅ 基于 MSR 的虚拟机监控程序检测绕过(对无效、不支持及保留的 Hyper-V MSR vmexit 注入 #GP)。
  • ✅ 基于 CR 的虚拟机监控程序检测绕过(影子 CR0 和 CR4 以隐藏虚拟机监控程序特定的位)。
  • ✅ 基于 XSETBV 的虚拟机监控程序检测绕过(对无效或不支持的 XSETBV vmexit 注入 #GP)。
  • ✅ 基于 VMCALL 的虚拟机监控程序检测绕过(对无效或不支持的 VMCALL vmexit 注入 #GP)。
  • ✅ 基于 ExceptionOrNMI 的虚拟机监控程序检测绕过(对特定异常 vmexit 注入 #GP、#PF、#BP、#UD)。
  • ✅ 无条件 vmexit(对无条件 vmexit 注入 #UD,但对于 Vmxon,如果不包含 VMXE 则注入 #UD;否则如果包含 VMXE 则注入 #GP)。
  • ❌ 基于 EPT 的虚拟机监控程序检测绕过(写入检查、时序检查和线程检查)。
  • ❌ 基于 RDTSC 的虚拟机监控程序检测绕过。
  • ✅ 从 UEFI 内存映射/表中移除虚拟机监控程序内存(识别虚拟机监控程序占用的内存区域,并修改 UEFI 内存映射将这些区域标记为 UNUSABLE)。

隔离与安全

  • ✅ 全局描述符表(GDT)、中断描述符表(IDT)和页表的自定义实现,以增强虚拟机监控程序的安全性和隔离性。

支持的硬件

  • ✅ 支持 VT-x 和扩展页表(EPT)的 Intel 处理器。
  • ❌ 支持 AMD-V(SVM)和嵌套页表(NPT)的 AMD 处理器。

支持的平台

  • ✅ Windows 10 - Windows 11,仅限 x64。

安装

  • 从此处安装 Rust。
  • 安装 cargo-make:cargo install cargo-make。

构建项目

  • 调试:cargo make build-debug。
  • 发布:cargo make build-release。

运行项目

  • 调试:cargo make run-debug。
  • 发布:cargo make run-release。

调试

  • 串口日志记录:使用串口日志记录器捕获虚拟机监控程序的日志。

启用调试模式

  • 测试模式:使用 bcdedit.exe /set testsigning on 激活测试签名。
  • Windows 调试:按照此Microsoft 指南中的步骤操作。
bcdedit.exe /bootdebug {bootmgr} on
bcdedit.exe /bootdebug on
bcdedit.exe /debug on

使用 Windbg 进行网络调试

  • 设置:bcdedit.exe /dbgsettings net hostip:w.x.y.z port:n。

用法

UEFI 蓝药丸虚拟机监控程序在以下条件下运行:

  • 安全启动已禁用:无需漏洞(本项目支持)。
  • 基于虚拟化的安全性 (VBS) 已禁用:确保兼容性。
  • 利用已知 UEFI 漏洞:使用过时或不受支持的固件,包括自带易受攻击二进制文件 (BYOVB) 技术,以绕过安全启动。
  • 利用未指定的 UEFI 漏洞:使用零日漏洞禁用安全启动。

配置说明

在设置此 UEFI 虚拟机监控程序时,根据系统的逻辑处理器/核心/线程数量配置文件非常重要。请编辑 global_const.rs 中的相关代码。

全局堆分配器在所有处理器/核心/线程之间共享,是一个预分配的内存池。栈大小按处理器/核心/线程分配。这种设计使得跟踪内存分配更加容易,特别是对于需要预分配缓冲区的钩子设置等任务。通过调整此文件中的设置,您可以确保分配足够的内存以容纳所有处理器,同时保持最佳性能和资源管理。

用法 1:在 VMware Workstation 上通过 UEFI Shell 运行 UEFI 蓝药丸虚拟机监控程序(支持)

  1. 创建用于启动的虚拟 USB 驱动器

    以管理员身份运行以下 PowerShell 脚本,在 USB 驱动器上创建新分区并将其格式化为 FAT32。此脚本将现有分区缩小 512 MB,并在 USB 驱动器上创建一个标签为“Hypervisor”的新分区。请根据您的环境修改驱动器号。或者,您也可以使用物理 USB 驱动器。

    # Define the size to shrink in MB
    $sizeToShrinkMB = 512
    
    # Define the drive letter of the existing partition to shrink
    $existingDriveLetter = "C"
    
    # Define the drive letter and label for the new partition
    $newDriveLetter = "D"
    $newFileSystemLabel = "Hypervisor"
    
    # Shrink the existing partition
    $volume = Get-Volume -DriveLetter $existingDriveLetter
    $partition = $volume | Get-Partition
    Resize-Partition -DriveLetter $partition.DriveLetter -Size ($partition.Size - ($sizeToShrinkMB * 1MB))
    
    # Create a new partition in the unallocated space
    $disk = Get-Disk -Number $partition.DiskNumber
    $newPartition = New-Partition -DiskNumber $disk.Number -UseMaximumSize -DriveLetter $newDriveLetter
    
    # Format the new partition
    Format-Volume -DriveLetter $newDriveLetter -FileSystem FAT32 -NewFileSystemLabel $newFileSystemLabel
    
    Write-Output "Partition created and formatted successfully."
    
  2. 为 VMware Workstation 进行设置

    • 构建项目:按照前面章节中提供的构建说明编译项目。
  3. 设置 VMware Workstation

    配置 VMware Workstation 在下次启动时进入固件设置,并使用物理 USB 驱动器作为启动设备:

    • 添加硬盘:
      • 物理 USB:转到 VM -> Settings -> Hardware -> Add -> Hard Disk -> Next -> SCSI or NVMe (Recommended) -> Next -> Use a physical disk (for advanced users) -> Next -> Device: PhysicalDrive1 and Usage: Use entire disk -> Next -> Finish.
      • 虚拟 USB:转到 VM -> Settings -> Hardware -> Add -> Hard Disk -> Next -> SCSI or NVMe (Recommended) -> Next -> Use a physical disk (for advanced users) -> Next -> Device: PhysicalDrive0 and Usage: Use individual partitions -> Select Partition -> Next -> Finish.
    • 添加串行端口:
      • 转到 VM -> Settings -> Add -> Serial Port -> Finish。
      • 选择 Use output file: C:\Users\memN0ps\Documents\GitHub\illusion-rs\logs.txt 将 COM1 的串行端口输出重定向到 logs.txt 文件。(您可以选择任何位置,但首选项目目录内)。
    • 启动选项:
      • 如果您不使用自动化 PowerShell 脚本,请点击 Power On to Firmware 启动虚拟机。
      • 选择 Internal Shell (Unsupported option) 或 EFI VMware Virtual SCSI Hard Drive (1.0)。
  4. 运行 PowerShell 脚本

    执行以下 PowerShell 脚本以自动化设置过程。请根据您的环境修改路径。

    ### Change paths according to your environment ###
    
    # Set build type to either 'debug' or 'release'
    $buildType = "debug" # Use this line for a debug build
    # $buildType = "release" # Uncomment this line and comment the above for a release build
    
下载工具