虚拟机检测技术剖析
虚拟机实验心得和总结报告

虚拟机实验心得和总结报告1. 引言近年来,随着计算机技术的不断发展以及云计算的普及,虚拟化技术在信息技术领域中起着越来越重要的作用。
虚拟机是一种在物理硬件上模拟出的计算机环境,在实验中可以有效提供多种操作系统的支持,以及资源的隔离和管理。
此次虚拟机实验的目的是熟悉虚拟机的使用和配置,并对其在现实场景中的应用有深入的了解。
2. 实验过程本次实验中,我们使用了VMware Workstation作为虚拟机软件,并安装了Ubuntu和Windows操作系统。
在实验中,我们首先进行了虚拟机软件的安装和配置,包括网络连接、资源分配等。
随后,我们学习了虚拟机的创建和克隆,以及快照和恢复功能的使用。
通过创建多个虚拟机实例并设置不同的网络环境,我们能够模拟出多种场景,并进行相关实验。
在进行操作系统安装和配置的过程中,我们学习了虚拟机的虚拟硬件设置,包括内存大小、磁盘空间、网络适配器等。
通过设置虚拟机的硬件资源,我们可以根据实际需求来分配计算机资源,并且能够在不同的虚拟机之间共享资源。
此外,我们还学习了虚拟机的网络配置,包括桥接模式、NAT模式和仅主机模式等,可以根据需要连接到不同的网络。
另外,虚拟机的快照功能是虚拟化技术中的重要特性之一,它能够捕捉并保存虚拟机的状态。
通过使用快照功能,我们可以在实验或应用中保存虚拟机的某个特定状态,并在需要的时候随时恢复。
这在实验中非常有用,可以帮助我们回滚到之前的状态,避免了重复安装和配置操作系统的麻烦,节省了时间。
3. 实验收获通过这次虚拟机实验,我对虚拟化技术有了更深入的了解,并掌握了虚拟机的安装、配置和使用方法。
具体来说,我学会了以下几点:首先,虚拟机技术可以提供一个安全、独立的计算机环境,在一个物理主机上运行多个虚拟机,各个虚拟机之间相互独立,互不影响。
这样可以有效地隔离和管理资源,提高计算机的利用率。
其次,虚拟机的快照功能对于实验和应用非常有用。
它可以帮助我们保存和恢复虚拟机的状态,避免了重复配置操作系统的时间和精力。
虚拟机实训报告实验分析

一、实验背景随着信息技术的快速发展,虚拟化技术在各个领域得到了广泛应用。
虚拟机作为虚拟化技术的一种实现方式,能够有效地提高计算机资源利用率,降低成本,并提高系统的安全性和可靠性。
为了更好地掌握虚拟机技术,我们进行了虚拟机实训实验,以下是对实验过程和结果的详细分析。
二、实验目的1. 熟悉虚拟机的基本概念和原理;2. 掌握虚拟机的安装、配置和管理方法;3. 提高计算机资源利用率和系统安全性;4. 培养动手实践能力。
三、实验环境1. 操作系统:Windows 102. 虚拟机软件:VMware Workstation 153. 实验内容:虚拟机的安装、配置和管理四、实验步骤1. 安装VMware Workstation 15(1)下载VMware Workstation 15安装包;(2)运行安装程序,按照提示完成安装。
2. 创建虚拟机(1)打开VMware Workstation 15,点击“创建新的虚拟机”;(2)选择“自定义(高级)”,点击“下一步”;(3)选择“典型(推荐)”,点击“下一步”;(4)选择“稍后安装操作系统”,点击“下一步”;(5)选择操作系统版本,点击“下一步”;(6)设置虚拟机名称和存放位置,点击“下一步”;(7)设置最大磁盘大小,选择“将虚拟磁盘存储为单个文件”,点击“下一步”;(8)设置内存大小,点击“下一步”;(9)设置网络类型,点击“下一步”;(10)设置I/O控制器类型,点击“下一步”;(11)选择CD/DVD驱动器,点击“使用ISO镜像文件”;(12)选择下载的系统镜像文件,点击“打开”;(13)点击“完成”。
3. 安装操作系统(1)启动虚拟机,按照提示完成操作系统安装;(2)安装完成后,关闭虚拟机。
4. 配置虚拟机(1)打开虚拟机,选择“编辑虚拟机设置”;(2)在“选项”中,设置虚拟机的内存、CPU等参数;(3)在“网络适配器”中,设置虚拟机的网络连接方式;(4)在“CD/DVD驱动器”中,设置虚拟机的启动顺序。
虚拟机基准测试Vmmark测试方法介绍(1)

虚拟机基准测试 Vmmark测试方法介绍什么是Vmmark计算机硬件的发展使得功能强大而相对便宜的多处理器服务器成为了主流,但在许多情况下,这些系统的性能都不能得到充分的利用,而近来多核心处理器的普及,也使得这种不充分性更加严重,这也是业界对虚拟化产生兴趣的原因,虚拟化环境提供了一个软件层,使得用户能够在同一个物理服务器内创建多个独立的虚拟机,同时运行多个虚拟机虽然会有一些虚拟化方面的开销,但却可以使得一台服务器得到更高的使用率。
虽然这些虚拟机的基础物理资源时共享的,但每个虚拟机确实完全独立的,并执行一个单独的操作系统哦个和单独的应用软件,如图1所示。
图1 虚拟机示意虽然虚拟化作为能充分利用服务器性能的技术现在已经是一个不可逆转的趋势,而且现在计算机越来越快的计算速度和更加强大灵活的虚拟化技术也为虚拟化的应用创造了更多的机会,但如何衡量服务器虚拟化性能却是一个问题。
传统的服务器基准测试仅侧重于对单一工作量的检验,而无法获取支持多个虚拟机系统的性能或者是在同一个服务器上同时支持多个工作量时服务器的性能。
一个更为恰当的虚拟机基准测试应该使用运行于多个操作系统上的现实且多样的工作量对服务器的性能加以检验,而且该基准测试应该产生一个易于理解的指标。
VMmark就是一个不错的基准测试方法,该测试将几个普通的工作量同时运行在单独的虚拟机上,每个工作量是一个单一的系统运行基准,我们把它称为tile,运行时产生的多种tile得分的综合就可以得到整个系统的基准评分。
从而可以让我们有效评估系统对于虚拟化的支持能力。
什么是tileVMmark的最终目标是要有效地测量跨越多种硬件平台的虚拟化性能,将会采用一些典型的应用加载在单一的物理服务器上,此种方法尽可能地保证系统资源如CPU、网络和磁盘得到有效地利用,事实上,虚拟环境中想要更顺利地运作,往往需求的是是物质资源的平衡利用。
虚拟化基准测试可以被认为是多个虚拟机执行一套多样化的工作的能力的综合,VMmark测试将几个普通的工作量同时运行在单独的虚拟机上,每个工作量是一个单一的系统运行基准,我们把它称为tile,运行时产生的多种tile总数就可以得到整个系统的基准评分。
虚拟机与物理机的性能对比测试与分析(七)

虚拟机与物理机的性能对比测试与分析随着信息技术的迅猛发展,虚拟化技术成为了企业中广泛应用的一项重要技术。
虚拟机作为虚拟化技术的核心组成部分,通过对物理机资源的抽象和共享,为企业提供了更加灵活和高效的IT资源管理方式。
然而,虚拟机与真实物理机之间的性能差异一直是争议的焦点。
本文将就虚拟机与物理机的性能对比进行测试与分析。
首先,我们需要明确虚拟机和物理机的定义。
物理机是指实际的硬件设备,包括中央处理器(CPU)、内存、硬盘等。
而虚拟机则是在物理机上通过虚拟化软件创建的一台逻辑机器,它共享物理机的硬件资源。
我们首先进行了计算性能测试。
在测试中,我们分别在虚拟机和物理机上运行相同的计算任务,比较它们的运行时间。
结果显示,在单个计算任务中,物理机性能要略优于虚拟机。
这是因为虚拟机的运行需要对物理机的资源进行抽象和共享,这会在一定程度上造成性能损失。
然而,在多个计算任务同时运行的情况下,虚拟机表现出了更好的性能。
这是因为虚拟机可以根据需要动态调整资源分配,使得各个任务能够更好地平衡利用物理机资源,从而提升整体性能。
接下来,我们进行了I/O性能测试。
在测试中,我们模拟了大量的磁盘读写操作,并比较了虚拟机和物理机的性能表现。
结果显示,在磁盘读写速度方面,虚拟机的性能略低于物理机。
这是因为虚拟机需要经过虚拟化软件与物理机之间的交互,这会增加数据传输的延迟。
然而,在I/O密集型任务中,虚拟机表现出了更好的性能。
这是因为虚拟机可以通过虚拟化软件对存储资源进行调度和缓存,从而优化磁盘读写操作的效率。
除了计算性能和I/O性能外,我们还测试了网络性能。
在测试中,我们通过模拟大量的网络数据传输,比较了虚拟机和物理机在网络性能方面的表现。
结果显示,在网络吞吐量方面,虚拟机的性能与物理机基本持平。
这是因为虚拟机可以通过虚拟化软件对网络资源进行隔离和调度,从而保证网络传输的效率和稳定性。
综上所述,虚拟机与物理机的性能存在一定的差异,但这并不意味着虚拟机一定比物理机差。
虚拟机与物理机的性能对比测试与分析

虚拟机与物理机的性能对比测试与分析近年来,虚拟化技术的发展日益迅猛。
虚拟机技术带来了许多便利和灵活性,让计算机资源的管理和使用更加高效。
然而,虚拟机技术相较于传统的物理机,是否在性能上有所损失,成为了一个备受关注的话题。
一、性能测试方法为了比较虚拟机和物理机的性能差异,我们需要设计合适的测试方法。
一个常用的方式是通过执行一系列基准测试来评估不同系统的性能。
这些基准测试可以涉及CPU计算能力、内存处理速度、磁盘I/O 速度、网络传输速率等指标。
值得注意的是,在进行性能测试时,我们应该选择相似配置的虚拟机和物理机进行对比。
这意味着,它们应该使用相同的处理器架构、内存容量和硬盘类型等硬件组件。
二、CPU性能对比首先,让我们关注CPU性能的对比。
通过运行CPU密集型任务,我们能够比较虚拟机和物理机在计算能力方面的差异。
实验结果显示,虚拟机在多核CPU上的性能损失相对较小,而在单核CPU上的性能损失更加显著。
这是因为虚拟机需要在物理机的虚拟层上进行调度和管理,而这个过程会引入一定的开销。
然而,随着虚拟化技术的不断发展,虚拟机在多核CPU上的性能差距正在逐渐缩小。
一些优秀的虚拟化平台能够通过智能调度算法和硬件辅助指令集,提高虚拟机在多核CPU上的性能表现。
三、内存性能对比内存是计算机系统中非常关键的资源。
因此,我们也需要比较虚拟机和物理机在内存性能方面的差异。
实验结果显示,虚拟机的内存性能普遍略低于物理机。
这是因为虚拟机需要通过虚拟层来管理和分配内存资源,而这个过程会引入一些额外的延迟。
然而,虚拟机在内存管理方面也有一些优势。
虚拟化平台可以通过内存共享和动态分配等技术,更好地管理和利用系统中的内存资源。
特别是在虚拟机集群中,可以通过负载均衡和内存迁移等功能,提高整体系统的内存利用率和性能表现。
四、磁盘I/O性能对比磁盘I/O是计算机系统中常见的瓶颈之一。
因此,我们还需要比较虚拟机和物理机在磁盘I/O性能方面的差异。
息技术 云计算 虚拟机资源管理系统测试方法

息技术云计算虚拟机资源管理系统测试方法文档标题:信息技术视角下云计算虚拟机资源管理系统测试方法探讨随着信息技术的飞速发展,云计算作为核心技术之一,在众多领域得到了广泛应用。
虚拟机资源管理系统作为云计算平台的核心组成部分,其性能和稳定性至关重要。
本文将详细探讨云计算虚拟机资源管理系统的测试方法,以期为相关领域的技术人员提供参考。
一、引言云计算虚拟机资源管理系统主要负责对云计算环境中的虚拟机资源进行统一调度、分配和管理。
为确保系统的高效、稳定运行,对其进行全面、深入的测试显得尤为重要。
本文将从以下几个方面阐述虚拟机资源管理系统测试方法。
二、测试目标1.系统性能:测试虚拟机资源管理系统的处理能力、响应时间、并发处理能力等性能指标。
2.系统稳定性:测试系统在长时间运行、高负载、异常情况等条件下的稳定性。
3.功能完整性:验证系统是否具备预期功能,包括虚拟机创建、启动、停止、迁移、监控等。
4.兼容性:测试系统在不同操作系统、不同硬件配置、不同网络环境下的兼容性。
5.安全性:评估系统在数据传输、存储、访问控制等方面的安全性。
三、测试方法1.性能测试(1)基准测试:通过模拟虚拟机创建、启动、停止等基本操作,测试系统在不同负载条件下的性能表现。
(2)压力测试:在系统达到或超过预期负载的情况下,测试系统的性能瓶颈和稳定性。
(3)并发测试:模拟多用户同时操作虚拟机资源,测试系统的并发处理能力。
2.稳定性测试(1)长时间运行测试:让系统连续运行一段时间,观察系统性能和稳定性变化。
(2)异常情况测试:模拟硬件故障、网络中断等异常情况,测试系统的恢复能力和稳定性。
3.功能测试(1)接口测试:对系统提供的API接口进行测试,验证接口的功能、性能和安全性。
(2)场景测试:设计不同的使用场景,验证系统在实际应用中的功能完整性。
4.兼容性测试(1)操作系统兼容性测试:在不同操作系统(如Windows、Linux等)上部署和运行系统,验证其兼容性。
实验四虚拟机实验报告

实验四虚拟机实验报告一、实验目的本次实验的主要目的是深入了解虚拟机的工作原理和功能,通过实际操作掌握虚拟机的创建、配置、安装操作系统以及在虚拟机中进行各种应用程序的运行和测试。
同时,通过对虚拟机的使用,提高对计算机系统资源管理和分配的理解,以及解决在虚拟机使用过程中可能遇到的各种问题的能力。
二、实验环境1、操作系统:Windows 10 专业版2、虚拟机软件:VMware Workstation Pro 163、硬件配置:Intel Core i7 处理器,16GB 内存,512GB SSD 硬盘三、实验内容1、虚拟机软件的安装与配置首先,从官方网站下载 VMware Workstation Pro 16 安装程序,并按照安装向导进行安装。
在安装过程中,选择典型安装选项,并接受默认的安装路径和设置。
安装完成后,启动 VMware Workstation Pro 16,进行软件的初始配置,包括许可证密钥的输入和网络设置的选择。
2、创建虚拟机打开 VMware Workstation Pro 16,点击“创建新的虚拟机”按钮。
在“新建虚拟机向导”中,选择“典型(推荐)”配置类型。
接着,选择要安装的操作系统类型和版本,本次实验选择安装Windows Server 2019 操作系统。
为虚拟机指定名称和存储位置,并根据实际需求设置虚拟机的磁盘大小和存储方式。
3、虚拟机的配置在创建虚拟机后,对虚拟机的硬件进行配置,包括内存大小、CPU 核心数量、网络适配器类型、声卡和显卡等。
根据实验的需求和主机的硬件资源,合理分配虚拟机的硬件资源,以确保虚拟机能够流畅运行。
4、安装操作系统配置完成后,启动虚拟机,将 Windows Server 2019 操作系统的安装光盘镜像文件加载到虚拟机的光驱中。
在虚拟机中按照操作系统的安装向导进行安装,包括选择安装分区、设置管理员密码等操作。
等待操作系统安装完成,并进行必要的系统更新和驱动安装。
虚拟机与物理机的性能对比测试与分析(二)

虚拟机与物理机的性能对比测试与分析随着信息技术的快速发展,云计算成为了现代企业和个人的便捷选择。
虚拟化技术在这一过程中扮演了至关重要的角色。
虚拟机技术的出现使得一台物理服务器可以同时运行多个虚拟机实例,从而提高资源利用率。
然而,虚拟机的性能是否能够与物理机相媲美,一直是一个备受争议的话题。
为了解虚拟机和物理机的性能差异,我们进行了一系列的对比测试和分析。
测试包括CPU、内存、存储和网络性能。
首先我们对CPU性能进行了测试。
为了减小误差,我们选择了相同型号和配置的物理机和虚拟机进行对比。
测试结果显示,在运行CPU 密集型任务时,物理机和虚拟机表现出相似的性能水平。
然而,在虚拟机中运行多个任务时,由于虚拟机之间的资源共享,CPU性能会受到一定程度的影响。
因此,在多任务并发场景下,物理机的性能优势更为明显。
接下来,我们测试了内存性能。
我们选择了一款开源的内存负载测试工具,并在物理机和虚拟机上运行。
测试结果显示,在内存读写速度方面,虚拟机和物理机性能基本持平。
然而,当虚拟机同时运行多个应用程序时,由于内存资源的划分和管理,虚拟机的性能会受到稍微的影响。
第三项测试是存储性能。
我们采用了标准化的磁盘读写测试工具,并分别在物理机和虚拟机上进行测试。
结果显示,虚拟机和物理机在磁盘读写速度上几乎没有显著差异。
然而,在虚拟机中运行多个磁盘密集型任务时,由于资源共享,虚拟机的磁盘性能会略有下降。
最后,我们测试了网络性能。
我们使用了网络性能测试工具,并模拟了大量的网络请求。
测试结果显示,无论是在物理机还是虚拟机中,网络性能基本保持一致。
虚拟机的性能会受到网络带宽和延迟的限制,但这种影响较小,普通应用场景下不会对用户体验产生明显影响。
通过对比测试和分析,我们可以得出结论:在大多数常见的应用场景下,虚拟机的性能与物理机相当。
虽然在多任务并发、内存共享和磁盘密集型任务方面,虚拟机的性能可能略有下降,但它们可以通过合理的资源管理和调度来减小这种影响。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
虚拟机检测技术剖析作者:riusksk (泉哥)主页:前言在当今信息安全领域,特别是恶意软件分析中,经常需要利用到虚拟机技术,以提高病毒分析过程的安全性以及硬件资源的节约性,因此它在恶意软件领域中是应用越来越来广泛。
这里我们所谓的虚拟机(Virtual Machine)是指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。
通过虚拟机软件(比如VMware,Virtual PC ,VirtualBox),你可以在一台物理计算机上模拟出一台或多台虚拟的计算机,这些虚拟机完全就像真正的计算机那样进行工作,例如你可以安装操作系统、安装应用程序、访问网络资源等等。
攻击者为了提高恶意程序的隐蔽性以及破坏真实主机的成功率,他们都在恶意程序中加入检测虚拟机的代码,以判断程序所处的运行环境。
当发现程序处于虚拟机(特别是蜜罐系统)中时,它就会改变操作行为或者中断执行,以此提高反病毒人员分析恶意软件行为的难度。
本文主要针对基于Intel CPU的虚拟环境VMware中的Windows XP SP3系统进行检测分析,并列举出当前常见的几种虚拟机检测方法。
方法一:通过执行特权指令来检测虚拟机Vmware为真主机与虚拟机之间提供了相互沟通的通讯机制,它使用“IN”指令来读取特定端口的数据以进行两机通讯,但由于IN指令属于特权指令,在处于保护模式下的真机上执行此指令时,除非权限允许,否则将会触发类型为“EXCEPTION_PRIV_INSTRUCTION”的异常,而在虚拟机中并不会发生异常,在指定功能号0A(获取VMware版本)的情况下,它会在EBX中返回其版本号“VMXH”;而当功能号为0x14时,可用于获取VMware内存大小,当大于0时则说明处于虚拟机中。
VMDetect正是利用前一种方法来检测VMware的存在,其检测代码分析如下:setz [rc]// 设置返回值pop ebxpop ecxpop edx}}__except(EXCEPTION_EXECUTE_HANDLER) //如果未处于VMware中,则触发此异常{rc =false;}return rc;}图1如图1所示,VMDetect成功检测出VMWare的存在。
方法二:利用IDT基址检测虚拟机利用IDT基址检测虚拟机的方法是一种通用方式,对VMware和Virtual PC均适用。
中断描述符表IDT (Interrupt Descriptor Table)用于查找处理中断时所用的软件函数,它是一个由256项组成的数据,其中每一中断对应一项函数。
为了读取IDT基址,我们需要通过SIDT指令来读取IDTR(中断描述符表寄存器,用于IDT在内存中的基址),SIDT指令是以如下格式来存储IDTR的内容:typedef struct{WORD IDTLimit; // IDT的大小WORD LowIDTbase; // IDT的低位地址WORD HiIDTbase; // IDT的高位地址} IDTINFO;(虚拟机监控器)必须更改虚拟机中的IDT地址,利用真主机与虚拟机环境中执行sidt指令的差异即可用于检测虚拟机是否存在。
著名的“红丸”(redpill)正是利用此原理来检测VMware的。
Redpill作者在VMware上发现虚拟机系统上的IDT地址通常位于0xFFXXXXXX,而Virtual PC通常位于0xE8XXXXXX,而在真实主机上正如图2所示都位于0x80xxxxxx。
Redpill仅仅是通过判断执行SIDT指令后返回的第一字节是否大于0xD0,若是则说明它处于虚拟机,否则处于真实主机中。
Redpill的源码甚是精简,源码分析如下:#include<stdio.h>int main(){unsigned char m[2+4], rpill[]="\x0f\x01\x0d\x00\x00\x00\x00\xc3"; //相当于SIDT[adrr],其中addr用于保存IDT地址*((unsigned*)&rpill[3])=(unsigned)m; //将sidt[addr]中的addr设为m的地址((void(*)())&rpill)(); //执行SIDT指令,并将读取后IDT地址保存在数组m中printf("idt base: %#x\n", *((unsigned*)&m[2])); //由于前2字节为IDT大小,因此从m[2]开始即为IDT地址if(m[5]>0xd0)printf("Inside Matrix!\n", m[5]); //当IDT基址大于0xd0xxxxxx时则说明程序处于VMware中else printf("Not in Matrix.\n");return0;}测试结果如图2所示:图2利用此IDT检测的方法存在一个缺陷,由于IDT的值只针对处于正在运行的处理器而言,在单CPU中它是个常量,但当它处于多CPU时就可能会受到影响了,因为每个CPU都有其自己的IDT,这样问题就自然而然的产生了。
针对此问题,Offensive Computing组织成员提出了两种应对方法,其中一种方法就是利用Redpill反复地在系统上循环执行任务,以此构造出一张当前系统的IDT值变化统计图,但这会增加CPU负担;另一种方法就是windows API函数SetThreadAffinityMask()将线程限制在单处理器上执行,当执行此测试时只能准确地将线程执行环境限制在本地处理器,而对于将线程限制在VM处理器上就可能行不通了,因为VM是计划在各处理器上运行的,VM线程在不同的处理器上执行时,IDT值将会发生变化,因此此方法也是很少被使用的。
为此,有人提出了使用LDT的检测方法,它在具有多个CPU的环境下检测虚拟机明显优于IDT检测方法,该方法具体内容参见下节内容。
方法三:利用LDT和GDT的检测方法在《Intel® 64 and IA-32 Architecture Software Developer’s Manual V olume 3A: System Programming Guide》第二章的V ol.3 2-5 一页(我的Intel开发手册是2008版的)中对于LDT和GDT的描述如下(以下内容为个人翻译):在保护模式下,所有的内存访问都要通过全局描述符表(GDT)或者本地描述符表(LDT)才能进行。
这些表包含有段描述符的调用入口。
各个段描述符都包含有各段的基址,访问权限,类型和使用信息,而且每个段描述符都拥有一个与之相匹配的段选择子,各个段选择子都为软件程序提供一个GDT或LDT索引(与之相关联的段描述符偏移量),一个全局/本地标志(决定段选择子是指向GDT还是LDT),以及访问权限信息。
若想访问段中的某一字节,必须同时提供一个段选择子和一个偏移量。
段选择子为段提供可访问的段描述符地址(在GDT 或者LDT 中)。
通过段描述符,处理器从中获取段在线性地址空间里的基址,而偏移量用于确定字节地址相对基址的位置。
假定处理器在当前权限级别(CPL)可访问这个段,那么通过这种机制就可以访问在GDT 或LDT 中的各种有效代码、数据或者堆栈段,这里的CPL是指当前可执行代码段的保护级别。
……GDT的线性基址被保存在GDT寄存器(GDTR)中,而LDT的线性基址被保存在LDT 寄存器(LDTR)中。
由于虚拟机与真实主机中的GDT和LDT并不能相同,这与使用IDT的检测方法一样,因此虚拟机必须为它们提供一个“复制体”。
关于GDT和LDT的基址可通过SGDT和SLDT指令获取。
虚拟机检测工具Scoopy suite的作者Tobias Klein经测试发现,当LDT基址位于0x0000(只有两字节)时为真实主机,否则为虚拟机,而当GDT基址位于0xFFXXXXXX时说明处于虚拟机中,否则为真实主机。
具体实现代码如下:elseprintf("Inside VMware\n");}void GDTDetect(void){unsigned int gdt_addr =0;unsigned char gdtr[4];_asm sgdt gdtrgdt_addr =*((unsigned int*)&gdtr[2]);printf("GDT BaseAddr:0x%x\n", gdt_addr);if((gdt_addr >>24)==0xff){printf("Inside VMware\n");}elseprintf("Native OS\n");}int main(void){LDTDetect();GDTDetect();return0;}测试结果如图3所示:图3方法四:基于STR的检测方法在保护模式下运行的所有程序在切换任务时,对于当前任务中指向TSS的段选择器将会被存储在任务寄存器中,TSS中包含有当前任务的可执行环境状态,包括通用寄存器状态,段寄存器状态,标志寄存器状态,EIP寄存器状态等等,当此项任务再次被执行时,处理器就会其原先保存的任务状态。
每项任务均有其自己的TSS,而我们可以通过STR指令来获取指向当前任务中TSS的段选择器。
这里STR(Store task register)指令是用于将任务寄存器(TR) 中的段选择器存储到目标操作数,目标操作数可以是通用寄存器或内存位置,使用此指令存储的段选择器指向当前正在运行的任务的任务状态段(TSS)。
在虚拟机和真实主机之中,通过STR读取的地址是不同的,当地址等于0x0040xxxx时,说明处于虚拟机中,否则为真实主机。
实现代码如下:#include<stdio.h>int main(void){unsigned char mem[4]={0};int i;__asm str mem;printf(" STR base: 0x");for(i=0; i<4; i++){printf("%02x",mem[i]);}if((mem[0]==0x00)&&(mem[1]==0x40))printf("\n INSIDE MATRIX!!\n");elseprintf("\n Native OS!!\n");return0;}测试结果如图4所示:图4方法五:基于注册表检测虚拟机在windows虚拟机中常常安装有VMware Tools以及其它的虚拟硬件(如网络适配器、虚拟打印机,USB 集线器……),它们都会创建任何程序都可以读取的windows注册表项,因此我们可以通过检测注册表中的一些关键字符来判断程序是否处于虚拟机之中。