2013-10-25 26 views
0

我想找到一种方法来以编程方式检测到我的程序在虚拟机上运行,​​据我所知,没有常见的方法来执行此操作。Windows 8任务管理器虚拟化选项

Windows 8任务管理器性能选项卡显示“Virtaulization”选项,这是什么意思?当我在虚拟机中运行Windows 8时,它会更改为虚拟处理器和虚拟机:是的,所以有些Windows 8如何检测到它在虚拟机内运行,Windows 8如何检测到它在虚拟机中运行?是否有可能以编程方式获取这些信息?我在平行和虚拟软件上都尝试过,两者都很好。

+0

在我真正的Windows 8上,任务管理器也显示“虚拟化:启用”。我相信这表明处理器支持虚拟化,而不是操作系统在VM中运行。 – Paul

回答

1

你应该在这个有趣的文章Red Pill... or how to detect VMM using (almost) one CPU instruction通过Joanna Rutkowska这曾经是here但现在死了,只能用waybackmachine hereVirtualization: Red Pill or Blue?通过Steven McElwee查看这也曾经是看看here但现在只能查看here

继承人的代码:

int swallow_redpill() 
{ 
    unsigned char m[2+4], rpill[] = "\x0f\x01\x0d\x00\x00\x00\x00\xc3"; 
    *((unsigned*)&rpill[3]) = (unsigned)m; 
    ((void(*)())&rpill)(); 
    return (m[5]>0xd0) ? 1 : 0; 
} 

如果没有如果虚拟机中运行和0应该返回1。


编辑:这可能对现代的CPU返回误报和apparently better to combine几个tests在一起,以确保结果是真实的。

1

在VMware上,您可以检查CD驱动器供应商 - 应该是“VMware”还是“VMware,Inc.”或者类似的东西。

我不知道VMware工作站,但在ESXi上,您的MAC地址通常以“00:50:56”开头。你也可以利用这个。

看看virt-what。也许你可以将它移植到Windows。

也许How to detect install is running on a VM?可以帮助你。