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