我发现了一篇关于这个主题的有用信息的文章。同一篇文章出现在多个地方,我不确定原始来源。VMware使用特定的无效x86指令返回有关自身的信息,而VirtualPC使用一个神奇的数字和一个IN指令的I/O端口。
这是可行的,但似乎在两种情况下都是未记录的行为。我想VMWare或VirtualPC的未来版本可能会更改机制。有更好的方法吗?这些产品是否有支持的机制?
类似地,有没有办法检测Xen或VirtualBox?
我不关心平台故意试图隐藏自己的情况。例如,蜜罐使用虚拟化,但有时会模糊恶意软件用于检测它的机制。我不介意我的应用程序在这些蜜罐中认为它没有被虚拟化,我只是在寻找“尽力而为”的解决方案。
应用程序大部分是Java,但我希望为这个特定的功能使用本地代码加JNI。Windows XP/Vista支持最重要,尽管引用文章中描述的机制是x86的通用功能,不依赖于任何特定的操作系统设施。
systemd
),似乎下面的答案是正确的方法。它不需要root权限。 - zrajm