VMware虚拟机检测技术研究

时间:2022-09-28 01:50:38

VMware虚拟机检测技术研究

摘要:近年来,随着虚拟化技术的进一步发展,特别是VMware虚拟机在桌面应用的广泛流行,使得人们越来越认识到虚拟化技术的优势。本文就VMware虚拟机检测技术进行研究和探讨。

关键词:VMware虚拟机;检测技术;模式

中图分类号:TJ765.4+1 文献标识码:A文章编号:1007-9599 (2011) 10-0000-01

VMware Virtual Machine Detection Technology

Wang Dong

(Kizilsu Kirgiz Autonomous Prefecture in Xinjiang Meteorological Bureau,Kizilsu Kirgiz845350,China)

Abstract:In recent years,with the further development of virtualization technologies,in particular,VMware virtual machines in a wide range of popular desktop applications,making the growing awareness of the advantages of virtualization technology.In this paper,VMware virtual machine detection technology research and discussion.

Keywords:VMware virtual machine;Detection technology;Mode

虚拟机(Virtual Machine)技术,就是用软件模拟现实的计算机系统的技术。利用这种技术,可以在现有计算机的主操作系统上建立几个同构或异构的虚拟计算机系统,这些虚拟机系统有独立的CPU、内存、硬盘,甚至还拥有独立的BIOS。目前主要的虚拟机软件有VMware公司的VMware和Microsoft公司的Virtual PC。

一、VMware工作模式

VMware为虚拟机系统提供了强大的网络功能,有三种网络工作模式:bridged(桥接模式)、NAT(网络地址转换模式)和host-only(主机模式)。为组建私有网络,实验测试环境等提供了很大的方便。

(一)bridged(桥接模式)。在bridged模式下,虚拟机就像是局域网中的一立的主机,它可以访问网内任何一台机器。虚拟机和宿主机器的关系,就像连接在同一个交换网络上的两台电脑。想让它们相互通讯,虚拟机系统的网络配置和宿主机系统必须一致,这样虚拟系统才能和宿主机器进行通信。即同为手工设置IP,掩码,网关,DNS,或者两者都是选“自动获取”。这样才会处在同一个内网,通讯正常

(二)host-only(主机模式)。在host-only模式中,所有的虚拟系统(可以是一台或者多台)是可以相互通信的,但虚拟系统和真实的网络是被隔离开的。虚拟机和宿主机之间,相当于这两台机器通过双绞线互连,同时各台虚拟机(同时运行的话)之间相当于连接在同一个交换网络上机器,可以互相通信。虚拟机系统要和宿主系统通信,必须把TCP/IP配置信息(如IP地址、子网掩码、网关地址、DNS服务器等),设置为“自动获取”,这些配置信息都是由VMnet1(host-only)虚拟网络的DHCP服务器来动态分配的。虚拟机系统要和其他虚拟系统通信的话,则可以和对方都手工把IP设置配置为同一网段,或者“自动获取”也可。

(三)NAT(网络地址转换模式)。使用NAT模式,就是让虚拟机系统借助VMWare提供的NAT(网络地址转换)功能,通过宿主机器所在的网络来访问公网。也就是说,使用NAT模式可以实现在虚拟系统里访问互联网,但是NAT模式下虚拟机系统的TCP/IP配置必须设置为“自动获取”,因为此配置信息是由VMnet8(NAT)虚拟网络的DHCP服务器提供的,不能手工修改,同时,虚拟机系统也就无法和本局域网中的其他真实主机进行直接通讯。采用NAT模式最大的优势是虚拟系统接入互联网非常简单,不需要知道宿主机是怎么上网的,只要宿主机器能访问互联网即可。

二、VMware虚拟机检测技术与方法

(一)通过执行特权指令来检测虚拟机。Vmware为真主机与虚拟机之间提供了相互沟通的通讯机制,它使用“IN”指令来读取特定端口的数据以进行两机通讯,但由于IN指令属于特权指令,在处于保护模式下的真机上执行此指令时,除非权限允许,否则将会触发类型为“EXCEPTION_PRIV_INSTRUCTION”的异常,而在虚拟机中并不会发生异常,在指定功能号0A(获取VMware版本)的情况下,它会在EBX中返回其版本号“VMXH”;而当功能号为0x14时,可用于获取VMware内存大小,当大于0时则说明处于虚拟机中。VMDetect正是利用前一种方法来检测VMware的存在,其检测代码分析如下:

bool IsInsideVMWare(){bool rc=true;__try{__asm{push edx push ecx push ebx mov eax,'VMXh' mov ebx,0//将ebx设置为非幻数'VMXH'的其它值mov ecx,10//指定功能号,用于获取VMWare版本,当它为0x14时用于获取VMware内存大小mov edx,'VX'//端口号in eax,dx//从端口dx读取VMware版本到eax//若上面指定功能号为0x14时,可通过判断eax中的值是否大于0,若是则说明处于虚拟机中cmp ebx,'VMXh'//判断ebx中是否包含VMware版本'VMXh',若是则在虚拟机中setz[rc]//设置返回值pop ebx pop ecx pop edx}}__except(EXCEPTION_EXECUTE_HANDLER)//如果未处于VMware中,则触发此异常{rc=false;}return rc;}

(二)利用IDT基址检测虚拟机。利用IDT基址检测虚拟机的方法是一种通用方式,对VMware和Virtual PC均适用。中断描述符表IDT(Interrupt Descriptor Table)用于查找处理中断时所用的软件函数,它是一个由256项组成的数据,其中每一中断对应一项函数。为了读取IDT基址,我们需要通过SIDT指令来读取IDTR(中断描述符表寄存器,用于IDT在内存中的基址),SIDT指令是以如下格式来存储IDTR的内容:

由于只存在一个IDTR,但又存在两个操作系统,即虚拟机系统和真主机系统。为了防止发生冲突,VMM(虚拟机监控器)必须更改虚拟机中的IDT地址,利用真主机与虚拟机环境中执行sidt指令的差异即可用于检测虚拟机是否存在。

(三)利用不可虚拟指令检测。有些指令像SIDT、GDT、SLDT、STR虚拟出来的效果和真实的效果是有差别的。VMware靠底层硬件来执行指令,它会重新部署一些敏感的数据结构,像IDT(interrupt descriptor table)、GDT(global descriptor table)等,所以通过SIDT、SGDT指令存储的IDT、GDT的基地址相对于真实系统是不一样的,另外,关于LDT,Windows不用到它,而VMware会用到,所以在虚拟机中的Windows的LDT肯定是一个不同于真实系统中的特别的值,比如在真机Windows XP下,IDT基地址为0x8003f400,GDT基地址为0x8003f000,LDTR里是以0000开头的;而虚拟机Windows XP下,IDT基地址为0xffc18000,GDT基地址为0xffc07000,LDTR里是以6040开头的,具体实现方法是利用sidt、sgdt、sldt指令检。

参考文献:

[1]王春海.虚拟机配置与应用完全手册[M].北京:人民邮电出版社,2003,8

[2]曹晓军.虚拟机技术的应用研究[J].甘肃广播电视大学学报,2006,16(2):75-78

[作者简介]王东(1973-),男,工程师,从事网络管理,技术保障工作。

上一篇:Oracle数据库中数据误操作的补救方法 下一篇:新型视觉瞄准线纹尺检定方法研究