我们使用硬盘和 CPU ID 等标准项目将我们的软件许可证锁定到物理硬件。我们如何降低客户安装到虚拟机然后克隆虚拟机、绕过我们的许可的风险?
10 回答
一种方法是拥有一个许可服务器。当您将许可证代码输入客户端(在 VM 上)时,它会联系服务器并将其许可证代码和其他信息发送给它。它反复联系它(您定义间隔 - 可能每隔几个小时一次)询问“我仍然有效吗”?随着这个请求,它发送一个唯一的 ID。服务器回复“是的,你是有效的”,并发送一个新的唯一 ID 返回给客户端。客户端将此唯一 ID 连同其下一个请求一起发送回服务器。服务器验证这是它为该许可证发送给客户端的相同 ID,即上一个请求。
如果虚拟机是重复的,下次它询问服务器“我有效吗?”时,它或其他虚拟机的唯一 ID 将不正确。两者都不会继续工作。
如果服务器出现故障或网络出现故障,您将需要确定该怎么做,以使客户端无法与服务器通信。您是否立即禁用您的软件?馊主意!不要让你的客户生气。你会想给他们一个宽限期。这应该多长时间?几天?周?
假设您给他们 1 个月的宽限期。理论上,他们可以在输入许可证密钥后克隆父虚拟机,然后在其他虚拟机的宽限期到期之前将其恢复到该克隆,从而禁用对它们的网络访问。但是,这对您的客户来说会很麻烦,只是盗版了您的软件的其他副本。您必须确定什么样的宽限期不会打扰您的合法客户,同时希望为您提供您所寻求的保护。
通过验证虚拟机的时钟设置是否正确,可以实现额外的保护。这将防止上述盗版方法。
另一个考虑因素是,精明的用户可以编写自己的许可服务器来与 VM 实例通信,并告诉他们“你很好”——因此加密通信可以帮助阻止这种情况。您想在这里走多远实际上取决于您认为盗版确实可能对您的客户造成多大的问题。最后,您将无法阻止真正有时间的海盗,但您可以让诚实的用户保持诚实。
License. Tell your users, they may not run unlicensed copies.
We are actually failing to buy a license for a software at the moment, because the vendor is scared of virtual machines: The infrastructure for our department is being moved to a centralized virtualized sollution and we have to fight the vendor to be allowed to buy a license for his software!
Don't be afraid of paying users.
People too cheep to buy licenses are going to look for another sollution and will be too much hassle anyway.
(good luck telling your boss that, though...)
没有充分的理由锁定到物理机器。最后我检查了计算机可能会出现故障,然后用户可能不仅会因为死机而感到不便,而且不得不打电话给您将软件锁定到新机器上。如果您必须执行严格的许可证管理,请使用(本地)管理服务器并运行副本,每隔几分钟验证他们是否拥有许可证。只要意识到,如果有人真的想在不付钱的情况下使用您的软件,那么无论您做什么,他们都会找到方法。
您需要计算机“硬件”之外的东西来进行身份验证。大多数公司选择硬件密钥(加密狗)用于成本高昂的软件,用户会忍受它。
其他公司使用在线方法 - 如果具有 CPUID 和其他硬件的多个用户同时使用给定许可证,则禁止另一个实例化,或关闭现有实例化。
您必须根据自己的需要和消费者愿意跳过您的反盗版圈来选择保护。
-亚当
除了需要定期在线激活外,您可以做的 AFAIK 并不多。
我们遇到了诺顿重影物理机器的问题。显然 HDD 序列号也有幻影。
如果您的软件在 VM 下运行,那么它将在任意数量的克隆 VM 下运行。因此,唯一的选择似乎是完全阻止它在 VM 下运行。这是一篇关于虚拟机检测的文章:检测您的程序是否在虚拟机内运行,以及一篇关于阻止它的文章。
顺便说一句,克隆虚拟机通常足以阻止临时用户绕过您的许可,而那些一心想破解的人可能会找到绕过它的方法。
“不要打扰”是简短的版本。对于您的客户而言,这样做并非易事收费很高(就像你在挖坑一样。)
“真正的”客户通常会为这些东西买单。据我所知,像企业这样的地方通常会认为不值得付出努力。
我知道一些虚拟机软件(至少是 VMware)具有允许软件检测虚拟化的功能。但是没有万无一失的方法,无论如何都可以修补这些功能。还可以使用神秘的性能变化(由于主机中的 CPU 峰值),可靠性值得怀疑。有很多“被虚拟化的迹象”,但它们往往不是 100% 可靠的。
这是一个问题,任何精明的用户都将能够击败你所做的任何事情。不精通的用户可能会被诸如 VmWare 播放器之类的行为所吸引,当您移动它时,它会更改虚拟机的 MAC 和其他 ID,大概是对此类问题的一种认可。
最好的解决方案可能是使用许可证服务器,因为该服务器将计算活动许可证的数量。节点锁定更容易被击败,并且使用服务器也倾向于将责任推给 IT 部门,与只想尽快完成工作的个人用户相比,IT 部门对不违反许可协议更为敏感。
但最后,我同意这一切都归结为正确的许可语言,并让客户在一定程度上得到信任。如果您认为人们以这种方式愚弄您,那么您一开始就不应该向他们出售您的软件......
如果您的软件需要在虚拟机上运行,那么这个概念如何:
- 在主机上,您创建一个运行的编译程序,例如。每半小时读取一次硬盘和 CPU ID,然后将其与当前时间戳以及所有这些信息的加盐哈希一起存储在一个文件中。
- 然后,您需要与 VM 共享包含该文件的文件夹。
- 然后,在您在 VM 内编译的软件中,您可以读取此文件并检查时间戳是否是最新的并且哈希是否有效。
或者更好的是,让主机程序以某种方式直接与 VM 中的软件通信。
这不是一个好的解决方案吗?不如使用硬件密钥(如 Yubikey)安全,但您必须非常精通技术才能破解它......?