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

标签 virtualbox vmware virtualization xen virtual-pc

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

我找到了an article以及有关该主题的一些有用信息。同一篇文章出现在多个地方,我不确定原始出处。 VMware实现特定的无效 x86 指令以返回有关其自身的信息,而 VirtualPC使用魔数(Magic Number)和带有 IN 指令的 I/O 端口。

这是可行的,但在这两种情况下似乎都是未记录的行为。我想 VMWare 或 VirtualPC 的 future 版本可能会改变该机制。有没有更好的办法?这两种产品都有受支持的机制吗?

同样,有没有办法检测XenVirtualBox

我不担心平台故意隐藏自己的情况。例如,蜜 jar 使用虚拟化,但有时会掩盖恶意软件用于检测它的机制。我不在乎我的应用程序会认为它没有在这些蜜 jar 中虚拟化,我只是在寻找“尽力而为”的解决方案。

该应用程序主要是 Java,但我希望使用 native 代码加上 JNI 来实现此特定功能。 Windows XP/Vista 支持是最重要的,尽管引用文章中描述的机制是 x86 的通用功能,并且不依赖于任何特定的操作系统设施。

最佳答案

您听说过 blue pill, red pill? 。这是一种用于查看您是否在虚拟机内运行的技术。该词的由来源于the matrix movie为 Neo 提供蓝色或红色药丸(留在矩阵内 = 蓝色,或进入“真实”世界 = 红色)。

以下是一些代码,将检测您是否在“矩阵”内运行:
(代码借自 this site,其中还包含一些有关当前主题的有用信息):

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

当您在虚拟机中运行时,该函数将返回 1,否则返回 0。

关于virtualbox - 从应用程序中检测虚拟化操作系统?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/154163/

相关文章:

Vagrant up 失败并显示警告 : Remote connection disconnect. 正在重试

linux - Reddit开源入门,配置/安装

vmware - VMWare 上的 tfs2010

linux - 使用 Citrix XenServer 设置 NAS

testing - XEN 与 KVM 的状态,用于内部虚拟服务器场(如现场农场)

虚拟机/管理程序中的 CUDA/OpenCL

windows - 从虚拟机检索 BSOD 文本

iphone - 使用 VirtualBox 在 Windows 7 机器上编译 iPhone 应用程序(通过 PhoneGap 或 Titanium)?

vmware - 是否可以让 ntpd 在虚拟机上工作?

magento - 为 Magento 在 Virtual Box (Win 7) 上设置 Ubuntu 12.04 LTS 的问题