【问题标题】:recognize virtual environment识别虚拟环境
【发布时间】:2012-02-28 09:15:28
【问题描述】:

在我上次的工作面试中,我被问到一个问题,直到现在我什至没有找到如何解决它的线索。

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

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

有什么想法吗?

【问题讨论】:

  • 你确定这不是指 VMware 吗? Java 应用程序只能在 JVM 中运行(C#/CLR 也是如此)。
  • 我对您想要检测它的原因很感兴趣。
  • 这是求职面试问题 - 所以没有给出任何理由
  • 在许可软件方面,实际检测虚拟化环境非常重要。

标签: c# virtual-machine vmware


【解决方案1】:

看看Thwarting Virtual Machine Detection,这是一个关于如何进行反向操作的演示文稿(停止应用程序检测到它正在虚拟机上运行,​​以防止恶意程序改变它们的行为)

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

  • 在操作系统(例如注册表、文件系统)中查找表明这是一个 VM 的“迹象”(对 VMWare 的引用是一个死胡同)
  • 查看关键内存结构(例如 IDT)在内存中的放置位置 - 通常,在虚拟机内存中的位置高于物理机。
  • 查找特定于 VM 的虚拟硬件(例如网络适配器或 USB 控制器)
  • 查找时钟与主机同步方式的异常情况。
  • 寻找特定于 VM 的处理器功能 - 一些虚拟机在标准 x86 指令集之外引入了额外的机器语言指令(用于来宾到主机通信等)

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

【讨论】:

  • 我还看到了直接从处理器缓存、分支预测和其他难以虚拟化的信息中获取数据的实例,以检测表明虚拟化的异常情况。基本上,虚拟化是虚拟化和检测之间的军备竞赛。
猜你喜欢
  • 2017-02-23
  • 1970-01-01
  • 2021-02-13
  • 1970-01-01
  • 1970-01-01
  • 2021-04-09
  • 2019-09-24
  • 2021-07-25
  • 1970-01-01
相关资源
最近更新 更多