我正在尝试找到一种以编程方式检测我的程序在虚拟机上运行的方法,据我所知,没有通用的方法可以做到这一点。
Windows 8任务管理器性能选项卡显示“Virtaulization”选项,这是什么意思?当我在虚拟机中运行Windows 8时,它会更改为虚拟处理器和虚拟机:是的,因此Windows 8检测到它在虚拟机中运行时,Windows 8如何检测到它在虚拟机中运行?是否有可能以编程方式获取此信息?我尝试了并行和vm ware两种方法都很好。
答案 0 :(得分:1)
你应该看一下这篇有趣的文章 Red Pill... or how to detect VMM using (almost) one CPU instruction
Joanna Rutkowska
曾经是here但现在已经死了并且只能通过 Virtualization: Red Pill or Blue?
使用waybackmachine here和 Steven McElwee
进行查看,其中{em> 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;
}
曾经是here但可以现在只能查看here。
下面是代码:
{{1}}
如果在虚拟机中运行,则应返回1,否则返回0.
编辑:它可能会在现代cpus及其apparently better to combine两个tests上返回误报,以确保结果是真实的。
答案 1 :(得分:1)
在VMware上,您可以检查CD驱动器供应商 - 应该是“VMware”还是“VMware,Inc。”或类似的东西。
我不知道VMware工作站,但在ESXi上,您的MAC地址通常以“00:50:56”开头。你也可以利用它。
看看virt-what。也许你可以把它移植到Windows。