我正在尝试找到一种编程方式来检测我的程序是否在虚拟机上运行,据我所知,parallels没有通用的方法来做到这一点。
Windows 8任务管理器性能选项卡显示“虚拟化”选项,这是什么意思?当我在虚拟机中运行windows8时,它会变成虚拟处理器和虚拟机:是的,那么windows8是如何检测到它在虚拟机中运行的呢?有没有可能通过编程获得这些信息?我在parallels和vm软件上都试过了,两者都工作得很好。
发布于 2013-10-25 22:10:21
你应该看一看Joanna Rutkowska写的这篇有趣的文章Red Pill... or how to detect VMM using (almost) one CPU instruction,它曾经是here,但现在已经死了,只能用waybackmachine here和Steven McElwee的Virtualization: Red Pill or Blue?查看,它也曾经是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;
}如果在虚拟机中运行,则应返回1;如果未在虚拟机中运行,则返回0。
编辑:它可能会返回假阳性-在现代的tests和它的apparently better to combine几个cpus在一起,以确保结果是真实的。
发布于 2013-10-26 04:12:51
在VMware上,您可以检查CD驱动器供应商-应该是"VMware“或"VMware,Inc.”。或者像这样的东西。
我不知道VMware工作站,但在ESXi上,你的MAC地址一般是以"00:50:56“开头的。您也可以利用这一点。
看看virt-what吧。也许你可以把它移植到Windows上。
也许How to detect install is running on a VM?能帮到你。
https://stackoverflow.com/questions/19588838
复制相似问题