vmware - vmware从应用程序中检测虚拟化操作系统?

  显示原文与译文双语对照的内容
123 0

我需要检测我的应用程序是否在虚拟化操作系统实例中运行。

我发现是一篇文章,其中包含关于主题的一些有用信息。相同的文章出现在多个地方,我不确定原始的来源。执行一个特别无效的x86指令来返回关于自身的信息,而VirtualPC插件使用一个魔术号和一个带有指令的I/O 。

这是可行的,但在这两种情况下似乎。我想未来的VMWare或者VirtualPC可能会改变这个机制。还有更好的方法吗?是否有支持产品的支持机制?

同样,是否有办法检测 Xen 或者 VirtualBox

我不关心平台故意试图隐藏自己的情况。例如蜜罐使用虚拟化,但有时会模糊恶意软件用来检测它的机制。我不管我的应用程序会认为它没有在这些jar中被虚拟化,我只是在寻找一个"最佳工作"解决方案。

应用程序主要是 Java,尽管我期望使用本机代码加入这个特定函数。虽然引用文章中描述的机制是x86的通用特性,但不依赖任何特定的操作系统工具,Windows xp/vista支持是最重要的。

时间:原作者:0个回答

54 5

你听说过蓝色药丸红色药丸它是一种用来检查你是否在虚拟机器内运行的技术。这个词起源于矩阵电影,其中Neo提供了蓝色或者红色药丸的真实'世界= 红色) 。

下面是在'矩阵'中运行的一些代码,它们会检测你是否正在运行:
这个网站的代码,也包含了一些关于当前主题的很好的信息):

 int swallow_redpill () {
 unsigned char m[2+4], rpill[] ="x0fx01x0dx00x00x00x00xc3";
 *((unsigned*)&rpill[3]) = (unsigned)m;
 ((void(*)())&rpill)();
 return (m[5]>0xd0)? 1 : 0;
 } 

当你在虚拟机内部运行时,函数将返回 1,否则返回 0.

原作者:
...