我需要检测我的应用程序是否在虚拟OS实例中运行。我找到了一篇文章,其中包含有关该主题的一些有用信息。同一篇文章出现在多个地方,我不确定原始来源。VMware实现了一个特殊的无效x86指令来返回有关其自身的信息,而VirtualPC使用了带有幻数和带有IN指令的I / O端口。这是可行的,但在两种情况下似乎都是未记录的行为。我认为将来的VMWare或VirtualPC版本可能会更改该机制。有没有更好的办法?两种产品都有受支持的机制吗?同样,有没有办法检测Xen或VirtualBox?我不担心平台故意隐藏自己的情况。例如,蜜罐使用虚拟化,但有时会掩盖恶意软件用来检测它的机制。我不在乎我的应用程序会认为它没有在这些蜜罐中进行虚拟化,我只是在寻找“尽力而为”的解决方案。该应用程序主要是Java,尽管我希望对此功能使用本机代码和JNI。Windows XP / Vista支持是最重要的,尽管参考文章中描述的机制是x86的通用功能,并且不依赖于任何特定的OS工具。
3 回答
慕莱坞森
TA贡献1810条经验 获得超4个赞
我认为,依靠诸如SIDT损坏的虚拟化之类的技巧并不能真正起到帮助作用,因为硬件会填补怪异而混乱的x86架构留下的所有漏洞。最好的方法是游说Vm提供程序,以一种标准的方式告诉您您在VM上-至少在用户明确允许的情况下。但是,如果我们假设我们明确允许检测到VM,那么我们也可以在其中放置可见标记,对吗?我建议仅使用一个告诉您您在VM上的文件来更新VM上的磁盘,例如,文件系统根目录中的一个小文本文件。或检查ETH0的MAC,并将其设置为给定的已知字符串。
添加回答
举报
0/150
提交
取消