认识虚拟环境

时间:2012-02-28 09:15:28

标签: c# virtual-machine vmware

在我上一次的面试中,我被问到一个问题,到目前为止,我甚至都找不到解决问题的线索。

因为这是一个非常有趣的问题,我想也许有人会有这个想法。

退出问题简单: “建议一种构建应用程序的方法,该方法能够识别它是否在虚拟机上运行。” (VM不是指CLR或JVM之类的东西,而是指可以使用VMware构建的完全虚拟化环境)

任何想法?

1 个答案:

答案 0 :(得分:4)

查看Thwarting Virtual Machine Detection,关于如何进行反向的演示文稿(停止检测到它在VM上运行的应用程序,以防止恶意程序改变其行为)

此演示文稿列出了一些通常用于检测虚拟机环境的不同机制:

  • 查看操作系统(例如注册表,文件系统)中的" tell-tale"表明这是一个虚拟机(对VMWare的引用是一个死的赠品)
  • 查看关键内存结构(例如IDT)放置在内存中的位置 - 通常这在虚拟机上的内存位置高于物理机。
  • 查找特定于VM的虚拟硬件(例如网络适配器或USB控制器)
  • 查找时钟与主机同步的异常情况。
  • 寻找特定于VM的处理器功能 - 一些虚拟机引入了超出标准x86指令集的其他机器语言指令(用于访客到主机之间的通信)

然而,最终没有100%可靠的方法来检测您是否在虚拟机上运行 - 如果目标是提供一个完全无法检测的环境,那么这些机制中的每一个都可以被修复"这样就完全无法检测到虚拟机。