资源描述:
《vmware虚拟机检测技术研究》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、VMware虚拟机检测技术研究:在当信息安全领域,特别是在恶意软件分析等方面,经常利用虚拟机技术,以提高病毒分析过程中的安全性和节约硬件资源。该文通过对基于特权级压缩的VMachinemoniter)下的,VMM要控制客操作系统,所以虚拟机运行内核模式的ring级要比VMM的ring级低。特权级压缩虚拟机的VMM的ring级和主机内核模式的ring级是相同的,都是在ring0下,特权级压缩虚拟机必须执行特权级压缩,所以实际上客操作系统内核模式是在ring1下执行的,正因为如此,对于一些特殊指令,这种类型的虚拟
2、机是不能截获的,必须通过模拟改变才能达到虚拟机的想要执行的效果。因为虚拟机特权级比主机的要低,有些中断和异常是无法处理的,因此它要改变一些数据结构,以完成这些处理,但是模拟总是会有缺陷的,也正因为这些缺陷才存在检测虚拟机的方法。 3VMentImageXh' movebx,0//任何值除了'VMXh' movecx,10//得到VMovedx,5658h//端口号到dx ineax,dx//读取端口,eax里返回版本号 cmpebx,564D5868h//读取成功,则ebx值为魔数 setz[rc
3、]//设置返回值 popebx popecx popedx } } __except(EXCEPTION_EXECUTE_HANDLER) {rc=false;}//出现异常说明是真机否则虚拟机 returnrc; } 另外,此方法在VMsidtm;//读取idtr的内容到内存 printf("IDTR:%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x",m[0],m[1],m[2],m[3],m[4],m[5]);//打印idtr的内容 printf("idtbase
4、:%#x",*((unsigned*)&m[2])); //打印idt基地址 return(m[5]>0xd0)?1:0;//地址很高说明是虚拟机 __asmsgdtm;//读取gdtr的内容到内存 printf("GDTR:%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x",m[0],m[1],m[2],m[3],m[4],m[5]);//打印gdtr的内容 printf("gdtbase:%#x",*((unsigned*)&m[2])); //打印gdt基地址 re
5、turn(m[5]>0xd0)?1:0;//地址很高说明是虚拟机 __asmsldtm;//读取ldtr的内容到内存 printf("LDTR:%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x",m[0],m[1],m[2],m[3],m[4],m[5]);//打印ldtr的内容 return(m[0]!=0x00&&m[1]!=0x00)?1:0; //前两字节为0000是真机否则是虚拟机 但是,当VMemset(&csdesc,0,sizeof(csdesc)); csdesc
6、.LimitLoit[19..16] Z { popeax push0x000F pusheax retf//使近程控制转移超过cs段界限 oreax,-1 jmpeax }//产生超出cs段界限的近程控制转移,以产生通用保护错误 intdetect(LPEXCEPTION_POINTERSlpep) { if((UINT_PTR)(lpep->ExceptionRecord->ExceptionAddress)>EndUserModeAddress) printf("VMulati
7、onmodedetected!"); returnEXCEPTION_EXECUTE_HANDLER; }//看EIP是否改变,来检测虚拟机的存在 这种方法有效的前提是VMovebx,eax这条指令在真机中执行的话,AMD炫龙CPU上为9或15,Intel双核CPU上为100左右,而在VM { try_again: rdtsc//执行指令前读取时间 movebx,eax//测试的指令 rdtsc//执行指令后读取时间 subeax,ebx//计算指令执行时间 pusheax cmpe
8、ax,1 jztry_again//如果时间太小重新执行 popeax movi,eax//把时间放到定义变量 } 4展望 虚拟机检测技术研究刚刚起步,还有许多问题等待我们进一步研究。目前,基于虚拟机检测技术大部分是基于具体虚拟机细节的,没有形成虚拟机检测的完整的理论体系,从当前的研究表明,基于性能的虚拟机检测技术是比较通用的,但由于虚拟机的产品形式和版本不同,都会存在着一定的差异,这需