我需要检测我的应用程序是否在虚拟化操作系统实例中运行。
我在 一篇文章中找到了一些关于这个主题的有用信息。同一篇文章出现在多个地方,我不确定原始来源。VMware实现一个特定的无效 x86指令来返回关于它自己的信息,而 虚拟电脑使用一个带有 IN 指令的神奇数字和 I/O 端口。
这是可行的,但在这两种情况下似乎都是没有文件记录的行为。我认为 VMWare 或 VirtualPC 的未来版本可能会改变这种机制。还有更好的办法吗?这两种产品是否有支持的机制?
类似地,是否有检测 Xen或 VirtualBox的方法?
我不关心平台故意隐藏自己的情况。例如,蜜罐使用虚拟化,但有时掩盖了恶意软件用来检测它的机制。我不在乎我的应用程序会认为它没有在这些蜜罐虚拟化,我只是在寻找一个“最佳努力”的解决方案。
这个应用程序主要是 Java,尽管我希望对这个特定的函数使用本机代码和 JNI。Windows XP/Vista 支持是最重要的,尽管参考文章中描述的机制是 x86的通用特性,并不依赖于任何特定的操作系统工具。