- Hypervisor From Scratch - 第 1 部分:基本概念和配置测试环境
- Hypervisor From Scratch – 第 2 部分:进入 VMX 操作
- Hypervisor From Scratch – 第 3 部分:设置我们的第一个虚拟机
- Hypervisor From Scratch – 第 4 部分:使用扩展页表 (EPT) 进行地址转换
- Hypervisor From Scratch – 第 5 部分:设置 VMCS 和运行来宾代码
- Hypervisor From Scratch – 第 6 部分:虚拟化已经运行的系统
- Hypervisor From Scratch – 第 7 部分:使用 EPT 和页面级监控功能
- Hypervisor From Scratch – 第 8 部分:如何使用管理程序施展魔法
一、基本概念和配置测试环境
1.1.介绍
欢迎来到名为“ Hypervisor From Scratch ”的多部分系列教程的第一部分。顾名思义,本课程包含创建基于硬件虚拟化的基本虚拟机的技术细节。如果您遵循本教程,您将能够创建自己的虚拟环境,并了解 VMWare、VirtualBox、KVM 和其他虚拟化软件如何使用处理器的设施来创建虚拟环境。此外,您还可以了解HyperDbg调试器的“VMM”模块内部是如何工作的。
本教程的完整源代码可在 GitHub 上获取:
[ https://github.com/SinaKarvandi/Hypervisor-From-Scratch ]
1.2.VMware Workstation的嵌套虚拟化
为了设置嵌套虚拟化环境,请确保在虚拟机中启用以下功能

1.3.概念
我们将在本系列的其余部分中经常使用一些关键字,您应该了解它们(大多数定义源自英特尔软件开发人员手册,第 3C 卷)。
Virtual Machine Monitor (VMM): VMM 充当host并完全控制处理器和其他平台硬件。 VMM 能够保留对处理器资源、物理内存、中断管理和 I/O 的选择性控制。
Guest Software: 每个虚拟机 (VM) 都是一个guest软件环境。
VMX Root Operation and VMX Non-root Operation: VMM在VMX root operation中运行, 而guest software在VMX non-root operation中运行.
VMX transitions: VMX root operation和VMX non-root operation之间的转换.
VM entries: 转换为VMX non-root operation.
Extended Page Table (EPT): 一种使用第二层将guest机的物理地址转换为host的物理地址的机制。
VM exits: 从VMX non-root operation转换到VMX root operation.
Virtual machine control structure (VMCS): 是内存中的一种数据结构,在 VMM 管理时,每个 VM 只存在一次(或更准确地说,每个虚拟 CPU 存在一个)。 随着不同 VM之间执行上下文的每次更改,VMCS 都会针对当前 VM 进行恢复,从而使用 VMCS 定义 VM 虚拟处理器和 VMM 控制Guest software 的状态。
VMCS 由六个逻辑组组成:
- guest-state区域:在 VM-entry时,处理器的状态信息从guest-state区域中加载。在VM-exit时,处
? 理器的当前状态信息保存在guest-state区域。
host-state区域:在VM-exit时,处理器的状态信息从host-state区域中加载。
VM-execution 控制区域:在进入VM后,处理器的行为由VM-execution控制区域中的字段提供控
? 制。例如,可以设置某些条件使得在guest执行中产生 VM-exit.。
VM-exit控制区域:控制处理器在处理VM-exit时的行为,也影响返回VMM后处理器的某些状态。
VM-entry控制区域:控制处理器在处理VM-entry时的行为,也决定进入VM后处理器的某些状态。
VM-exit信息区域:记录引起VM-exit事件的原因及相关的明细信息。也可以记录VMX指令执行失败
? 后的错误编号。
我发现了一篇很好的作品来说明 VMCS


不用担心这些字段,我将在后面的部分中清楚地解释其中的大部分内容。 请记住,VMCS 结构因处理器的不同版本而异。
1.4.VMX指令
VMX引入了一下新指令

1.5.VMM生命周期

以下几项总结了 VMM 及其guest软件的生命周期以及它们之间的交互:
- 软件通过执行VMXON指令进入VMX操作。
- 使用 VM entries,VMM 可以将 guest 虚拟机转变为 VM(一次一个)。 VMM使用指令VMLAUNCH和VMRESUME影响VM entries; 它使用 VM exits重新获得控制权。
- VM exits将控制转移到VMM指定的入口点。 VMM可以针对VM exits的原因采取适当的操作,然后使用VM entries返回到VM。
- 最终,VMM 可能决定自行关闭并离开 VMX 操作。 它通过执行 VMXOFF 指令来实现这一点。
现在就够了!
1.6.相关工作
其他与虚拟机管理程序相关的作品和材料。
Awesome virtualization(介绍书籍、论文、项目、课程、CVE 和其他与虚拟机管理程序相关的作品)-https://github.com/Wenzel/awesome-virtualization
7 天虚拟化:虚拟机管理程序开发系列 - ( https://revers.engineering/7-days-to-virtualization-a-series-on-hypervisor-development/ )
最后,如果您想使用虚拟机管理程序进行调试、研究或逆向工程,您可以使用HyperDbg Debugger,因为该调试器中实现了许多基于虚拟机管理程序的创新方法,这将为您的逆向之旅提供帮助。
1.7.结论
在这一部分中,我们研究了我们应该注意的一般关键字,并为我们将来的测试创建了一个简单的测试环境。 在下一部分中,我将解释如何使用我们上面制作的驱动程序在您的计算机上启用 VMX。 然后我们将调查虚拟化的其余部分,所以我们下一部分见。
1.8.参考
[1] 英特尔? 64 和 IA-32 架构软件开发人员手册合并第 3 卷 ( https://software.intel.com/en-us/articles/intel-sdm )
[2] 硬件辅助虚拟化 ( http://www.cs.cmu.edu/~412/lectures/L04_VTx.pdf )
[3] 编写 Windows 内核驱动程序 ( https://resources.infosecinstitute.com/writing-a-windows-kernel-driver/ )
[4] 什么是 1 类虚拟机管理程序? – ( http://www.virtualizationsoftware.com/type-1-hypervisors/ )
[5] Intel / AMD CPU 内部结构 – ( https://github.com/LordNoteworthy/cpu-internals )
[6] Windows 10:禁用签名驱动程序强制执行 – ( https://ph.answers.acer.com/app/answers/detail/a_id/38288/~/windows-10%3A-disable-signed-driver-enforcement )
[7] 指令集映射 ? VMX 指令 – ( https://docs.oracle.com/cd/E36784_01/html/E36859/gntbx.html )
[8] HyperDbg 文档 – ( https://docs.hyperdbg.org )