0

我正在尝试找到一种以编程方式检测我的程序是否在虚拟机上运行的方法,据我所知,并行没有通用的方法可以做到这一点。

Windows 8 任务管理器性能选项卡显示“虚拟化”选项,这是什么意思?当我在虚拟机中运行 Windows 8 时,它会更改为虚拟处理器和虚拟机:是的,Windows 8 如何检测到它在虚拟机中运行,Windows 8 如何检测到它在虚拟机中运行?是否可以通过编程方式获取这些信息?我在并行和 vm ware 上都进行了尝试,并且都运行良好。

4

2 回答 2

1

你应该看看这篇有趣的文章Red Pill... or how to detect VMM using (almost) one CPU instructionJoanna Rutkowska它曾经在这里,但现在已经死了,只能用waybackmachine在这里查看,它也曾经在这里,但现在只能在这里查看。Virtualization: Red Pill or Blue?Steven McElwee

继承人的代码:

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。


编辑:它可能会在现代 cpu 上返回误报,显然更好地将几个测试结合在一起以确保结果是真实的。

于 2013-10-25T14:10:21.340 回答
1

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

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

看看virt-what。也许您可以将其移植到 Windows。

也许如何检测安装在虚拟机上运行?能帮你。

于 2013-10-25T20:12:51.197 回答