我想找到一种方法来以编程方式检测到我的程序在虚拟机上运行,据我所知,没有常见的方法来执行此操作。Windows 8任务管理器虚拟化选项
Windows 8任务管理器性能选项卡显示“Virtaulization”选项,这是什么意思?当我在虚拟机中运行Windows 8时,它会更改为虚拟处理器和虚拟机:是的,所以有些Windows 8如何检测到它在虚拟机内运行,Windows 8如何检测到它在虚拟机中运行?是否有可能以编程方式获取这些信息?我在平行和虚拟软件上都尝试过,两者都很好。
我想找到一种方法来以编程方式检测到我的程序在虚拟机上运行,据我所知,没有常见的方法来执行此操作。Windows 8任务管理器虚拟化选项
Windows 8任务管理器性能选项卡显示“Virtaulization”选项,这是什么意思?当我在虚拟机中运行Windows 8时,它会更改为虚拟处理器和虚拟机:是的,所以有些Windows 8如何检测到它在虚拟机内运行,Windows 8如何检测到它在虚拟机中运行?是否有可能以编程方式获取这些信息?我在平行和虚拟软件上都尝试过,两者都很好。
你应该在这个有趣的文章Red Pill... or how to detect VMM using (almost) one CPU instruction
通过Joanna Rutkowska
这曾经是here但现在死了,只能用waybackmachine here和Virtualization: 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在一起,以确保结果是真实的。
在VMware上,您可以检查CD驱动器供应商 - 应该是“VMware”还是“VMware,Inc.”或者类似的东西。
我不知道VMware工作站,但在ESXi上,您的MAC地址通常以“00:50:56”开头。你也可以利用这个。
看看virt-what。也许你可以将它移植到Windows。
在我真正的Windows 8上,任务管理器也显示“虚拟化:启用”。我相信这表明处理器支持虚拟化,而不是操作系统在VM中运行。 – Paul