【问题标题】:Techniques used to discover if a VM has been replicated / if software has been installed in a VM用于发现 VM 是否已复制/是否已在 VM 中安装软件的技术
【发布时间】:2013-10-04 20:58:57
【问题描述】:

我的情况是这样的:如果许可文件从一个位置复制到另一个位置,我们有一个带有许可证的产品会成功停用。这也可以在 PC 上完美运行。但是,我们刚刚发现了一个不能按预期工作的用例:如果软件在 VM 中获得许可,并且 VM 被第二次复制和加载,这可以绕过许可证复制保护,因为软件认为它仍然是同一系统的一部分。有哪些技术可用于识别软件是否安装在虚拟系统中,以及该 VM 是否已被复制以规避复制保护?

我知道这是一个相当广泛的问题,但我并不是在寻找关于我应该如何实施复制保护的确切方法。我正在寻找关于如何检测虚拟机是否存在以及需要检查哪些内容以确保虚拟机本身没有被复制的经过验证的真实技术。

如果我没有在正确的地方提出这个问题(StackOverflow 是否有一个用于广泛问答讨论的部分,而不是空白的“问问题得到答案”格式?),请将其移至适当的位置。

【问题讨论】:

  • 您无法检测是否复制了 VM 映像为了...。那是意图,你需要一个读心器。但即使检测到图像被复制也几乎是不可能的。这只是一点点。位序列10001是否被复制?如果你不能从 5 位中分辨出来,你需要多少位?

标签: .net virtual-machine copy-protection


【解决方案1】:

您可以使用 VMware API 来查找在同一 ESXserver(管理程序)上运行的 VM。我不确定这些是否可以跨 esx 服务器工作,但如果它们连接在同一个 vCenter 上可能是可能的。此外,还有一些方法可以在 VM 上发现服务,这些方法也需要特定服务的支持(在您的情况下,是您的软件)。我相信,当服务启动时,可以从来宾虚拟机插入挂钩,并且可以从其他虚拟机调用。

在您的情况下,假设您的程序出现在一个 VM 中时,您可以插入钩子。并且说,如果 VM 被复制并且稍后当您的程序出现在复制的 VM 上时,调用钩子以查看服务是否在另一个 VM 上运行(您可以与钩子共享一些密钥,以便新的 VM 服务了解另一个人正在运行相同的密钥)

很久以前,我们在开发基于 vm 的项目时也做过类似的事情。但我现在不记得确切的细节了。

但我认为没有办法确定虚拟机是否正在复制。

【讨论】:

  • 我希望也许我可以获得加载的虚拟磁盘的实际路径,并可能将我们的许可证绑定到该路径(如果我们在虚拟环境中)
猜你喜欢
  • 2013-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-08
  • 2013-10-02
相关资源
最近更新 更多