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

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

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

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
工具/GitHubGitHub/ionescu007/simplevisor
逆向工程安全虚拟化恶意软件分析硬件安全二进制分析论文与研究学习与教育
GitHubionescu007/simplevisor

SimpleVisor

面向 Windows 和 UEFI 的最小化 Intel VT-x 虚拟机监控程序,可虚拟化实时主机以进行内省,支持动态 hyperjacking、unhyperjacking、EPT 和 VPID。

查看仓库
2.0k2862年前Kitploit 审核通过

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
网站

SimpleVisor

SimpleVisor 是一个简单、可移植、专用于 Intel x64/EM64T VT-x 的虚拟机监控程序,其有两个明确目标:使用最少的汇编代码(10 行),并拥有最少的 VMX 相关代码以支持动态 hyperjacking 和 unhyperjacking(即在宿主内部虚拟化宿主状态),同时支持 EPT 和 VPID 等高级功能。它目前可在 Windows 和 UEFI 环境中运行。

简介

你是否一直好奇如何构建一个虚拟机监控程序?Intel 的文档(数百页之多)是否让你感到沮丧?你在线找到的示例是否只是让事情变得更加混乱,或者需要花费数周时间阅读成千上万行代码?如果是这样,SimpleVisor 可能就是适合你的项目。

不计解释每一行代码的详尽注释,以及特定的 Windows 相关或 Intel 相关的特殊之处,SimpleVisor 大约只有 500 行 C 代码和 10 行 x64 汇编代码,同时具备在每一个近期版本的 64 位 Windows 上运行的能力,并支持运行时动态加载/卸载。

此外,SimpleVisor 利用一个轻量级的 OS 库来实现 Windows 特定功能,将虚拟机监控程序部分与 Windows 特定部分分离。借助这种可移植设计,现在还提供了 SimpleVisor 的 UEFI 版本。但请注意,由于 UEFI 的问题,它并不具备对 MP 环境的稳健支持,并且加载操作系统最终会导致崩溃,因为操作系统会因其对处理器资源的重新配置而进入未实现的代码路径。从 UEFI 虚拟化操作系统的整个启动过程超出了本项目范围。

SimpleVisor 可以使用 Visual Studio 2015 Update 3 构建,虽然较旧/较新的编译器尚未测试且不受支持,但它们很可能也能构建该项目。不过,保持你所看到的各种编译器和链接器设置不变非常重要。

SimpleVisor 目前已在以下平台上成功测试:

  • Windows 8.1,Haswell 处理器(自定义台式机)
  • Windows 10 Redstone 1,Sandy Bridge 处理器(Samsung 930 笔记本电脑)
  • Windows 10 Threshold 2/Redstone 1,Skylake 处理器(Surface Pro 4 平板电脑)
  • Windows 10 Threshold 2,Skylake 处理器(Dell Inspiron 11-3153,带 SGX)
  • VMWare Workstation 11,但不带 EPT(VMWare 不支持 1GB EPT)
  • UEFI 2.4,Asus Maximus VII Extreme 主板(自定义台式机)

目前,它尚未在 Bochs 上测试,但没有理由 SimpleVisor 不能在这样的环境中运行。但是,如果你的机器已经运行在 Hyper-V 或 Xen 等虚拟机监控程序之下,SimpleVisor 将无法加载。

请记住,x86 版本的 Windows 明确不受支持,早于 Nehalem 微架构的处理器也不受支持,Windows 7 同样不受支持。后两者的支持很容易添加,并且存在于某些分支中。

动机

现有太多虚拟机监控程序项目要么极其复杂(Xen、KVM、VirtualBox)和/或闭源(VMware、Hyper-V),并且严重偏向基于 Linux 的开发或系统。此外,它们中的大多数(除 Hyper-V 外)明确是为了支持虚拟机执行而构建的,而不是为了虚拟化一个正在运行的实时系统,以便对其执行内省或其他安全相关任务。

不过,有几个项目确实脱颖而出,例如 Joanna 最初的 Blue Pill,或 VirtDbg 和 HyperDbg 等项目。遗憾的是,这些项目中的大多数如今已经相当陈旧,有些只能在 x86 处理器上运行,并且不支持 Windows 10 等较新的操作系统。另一个相当简单的示例,在某些方面与 Blue Pill 类似,但实际上很好地展示了 EPT 用于“Split-TLB”的用法,是来自 Jacob Torrey/AIS 的 MoRE。

实际上最接近提供一个以 Windows 为中心、现代且受支持的虚拟机监控程序的项目是 HyperPlatform,我们强烈推荐将其作为更广泛可用的研究型虚拟机监控程序开发的起点。然而,在尝试创建一个更广泛稳健的通用“平台”时,HyperPlatform 也遭受了一定程度的臃肿,使其更难理解虚拟机监控程序真正的基本需求是什么,以及如何初始化一个虚拟机监控程序。类似地,同样热爱 STL/C++,但还包含 ELF 加载器和 UEFI/Linux 支持,并带有单元测试和更高稳健性的是同样来自 AIS 的 Bareflank。除此之外,你可能就进入了 Xen 级别的复杂性。

如上所述,本项目的明确目标是以任何可能的方式最小化代码,同时不造成负面副作用,并专注于“裸机”需求。这包括:

  • 最小化汇编代码的使用。如果不是因为缺少 __lgdt 内建函数,以及需要绕过某个 Windows API 的行为,虚拟机监控程序入口点中只有前 4 条指令需要汇编。就目前而言,该项目总共有 10 条指令,分布在 3 个函数中。这与其他虚拟机监控程序项目形成了巨大差异,后者通常有数百行汇编代码。为了实现这一结果,使用了各种 OS 特定技巧和编译器捷径。
  • 减少对不太可能发生的错误的检查。给定一组正确配置且可信的输入数据,例如 vmx_vmwrite 和 vmx_vmread 等指令应当永远不会失败。
  • 移除对 x86 的支持,因为这会增加复杂性,并导致围绕 64 位字段的特殊处理。
  • 明确将所有可能的 VM-Exit 减少到仅 Intel 架构定义的最小集合(CPUID、INVD、VMX 指令和 XSETBV)。这是有意为之,以尽可能保持虚拟机监控程序以及初始化代码尽可能小。
  • 不支持 VMCALL。许多虚拟机监控程序使用 VMCALL 作为退出虚拟机监控程序的方式,这需要汇编编程(没有内建函数)以及额外的退出处理。SimpleVisor 改用 CPUID 陷阱。
  • 依赖鲜为人知的 OS 函数来简化虚拟机监控程序的开发,例如 Windows 上的 Generic DPC 和休眠上下文,或 UEFI 上的 PI MP 协议。
  • 以非常简单的方式支持 EPT/VPID,以展示该功能最简单可能实现的坚实基础。
  • OS 特定例程的可移植性和隔离。

另一个隐含目标是支持最新的硬件功能,因为即使 Bochs 也并不总是拥有最新的 Intel VMX 指令和/或定义。这些通常出现在诸如 "vmcs.h" 和 "vmx.h" 之类的头文件中,不同项目对这些头文件有不同程度的定义。例如,Xen master 有一些未发布的 VM Exit 原因,但没有某些已发布的原因,而 Bochs 有这些已发布的原因,尽管它没有未发布的原因!其中一个例子是使用 1GB EPT 项,例如 VMWare 无法正确虚拟化这一点。

最后,SimpleVisor 旨在成为一个教育工具——它包含详尽注释,解释每一行代码背后的所有逻辑,以及使其能够实现预期结果的特定 Windows 或 Intel VMX 提示和技巧。各种错误或文档记录不佳的行为都被明确指出。

在 Windows 上安装

由于 x64 Windows 要求所有驱动程序都必须签名,因此你必须对 SimpleVisor 二进制文件进行测试签名。可以通过使用“Driver Signing”选项并启用“Test Sign”以及你自己的证书来设置 Visual Studio 项目文件以完成此操作。你也可以从 UI 中生成自己的证书。

其次,你必须在机器上启用测试签名模式。为此,首先启动进入 UEFI 以关闭“Secure Boot”,否则无法启用测试签名模式。或者,如果你拥有有效的 KMCS 证书,也可以对驱动程序进行“Production Sign”以避免此要求。

要设置测试签名模式,可以使用以下命令:

bcdedit /set testsigning on

重启后,你可以使用以下命令在注册表中为 SimpleVisor 设置所需的服务控制管理器项:

sc create simplevisor type= kernel binPath= "<PATH_TO_SIMPLEVISOR.SYS>"

然后你可以使用以下命令启动 SimpleVisor

sc start simplevisor

并使用以下命令停止它

sc stop simplevisor

使用这些命令中的任何一个都必须具有管理员权限。

参考资料

如果你想进一步了解我的研究或工作,我邀请你访问我的博客 http://www.alex-ionescu.com,以及我的培训与咨询公司 Winsider Seminars & Solutions Inc.,网址为 http://www.windows-internals.com。

https://github.com/upring/virtdbg

http://xenbits.xen.org/gitweb/?p=xen.git;a=summary

https://github.com/svn2github/bochs

https://github.com/rmusser01/hyperdbg

http://invisiblethingslab.com/resources/bh07/nbp-0.32-public.zip

https://github.com/tandasat/HyperPlatform

https://github.com/ainfosec/MoRE

https://github.com/Bareflank/hypervisor

注意事项

SimpleVisor 旨在最小化代码大小和复杂性——这确实以稳健性为代价。例如,尽管 SimpleVisor 执行的许多 VMX 操作“应该”永远不会失败,但总会有未知原因,例如内存损坏、CPU 勘误、无效的宿主 OS 状态以及潜在错误,可能导致某些操作失败。对于真正稳健的商业级软件,必须考虑这些可能性,并且必须添加错误处理、异常处理和检查来支持它们。此外,现存的大量 BIOS,以及不同的 CPU 和芯片组迭代,都可能各自具有必须检查的特定不兼容性或变通方法。SimpleVisor 不进行任何此类错误检查、验证和异常处理。它不是为生产使用而设计的稳健软件,而是一个参考代码库。

许可证

Copyright 2016 Alex Ionescu. All rights reserved. 

Redistribution and use in source and binary forms, with or without modification, are permitted provided
that the following conditions are met: 
1. Redistributions of source code must retain the above copyright notice, this list of conditions and
   the following disclaimer. 
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions
   and the following disclaimer in the documentation and/or other materials provided with the 
   distribution. 

THIS SOFTWARE IS PROVIDED BY ALEX IONESCU ``AS IS'' AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ALEX IONESCU
OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

The views and conclusions contained in the software and documentation are those of the authors and
should not be interpreted as representing official policies, either expressed or implied, of Alex Ionescu.
下载工具