保护应用程序不会从一台 PC 复制到另一台 PC

Secure application from being copied from one PC to another

我已经创建了一个 JavaFX 应用程序。现在我想保护它不被复制到其他计算机。更详细 我将应用程序出售给一位客户,在安装此应用程序后,我需要保护它不被从一台计算机复制到另一台计算机。

如何防止他人复制应用程序?

规则是:您不能阻止在其计算机上具有管理员权限的用户复制该计算机上存在的任何文件的位。句号。

你能做的最好的事情就是找到一个硬件标识符来识别特定的机器,然后混淆那个值在某处(在可执行文件本身或辅助文件中,甚至通过您拥有的服务器上的网络)。

当程序是运行时,它可以将硬件标识符与其存储的标识符进行比较,如果它们不同则扼流圈。

限制:

  • 除非您自己安装,否则很难防止用户在安装前复制程序。这意味着您将需要在安装时执行在线步骤,以防止从同一来源进行多次安装
  • 如果用户由于任何原因必须更改您监控的硬件,则测试将失败,但应允许用户使用您的程序 => 准备好提供相关支持。并确保如果您不明确要求,临时用户不会认为他的程序不再工作只是因为内部网络接口已停止使用。

TL/DR:您正在尝试用技术手段解决一个法律问题。如果可以的话,请克制。我还记得需要并行端口上的特殊硬件的旧程序。这引起了很多噩梦,因为我工作的组织突然出错,决定不再购买需要硬件密钥的软件,即使更便宜。用户体验确实是一个选择标准,而那些@#&! 安全 工具提供非常 糟糕的用户体验。

您要查找的术语是 DRM(“Digital Rights management”),在大多数情况下,它是一个失败的原因。实现牢不可破的 DRM 是不可能的,因为任何一台计算机可以做的事另一台计算机也可以做,所以无法防止有人伪造 "oh it's still the same computer"。可以尝试检查硬件相似性和序列号等,但这些都可以被欺骗(至少在理论上)并且在实践中也会破坏合法的用例,例如更换故障硬盘。

也不可能阻止某人简单地修改您的程序以删除或削弱 DRM。即使是像加密二进制文件的整个非 DRM 实现部分和仅在 DRM 检查通过时获取解密密钥这样的技术也是不够的,因为解密密钥可以从进程的内存中捕获并用于解密加密部分,然后 DRM 部分就可以扔掉了。混淆会使执行此操作变得更加困难,但如果计算机可以执行该程序,那么人类就可以(有足够的时间 and/or 有用的软件)对该程序进行逆向工程。

所有这些混淆和 DRM 所做的就是让某人花费更长的时间来成功地对程序进行逆向工程/盗版。从理论上讲,您可能会把难度提高到足够高的程度,即考虑到当前可用的工具,地球上没有人可以对软件进行足够的逆向工程以在比克隆程序的行为,但你不能让它变得不可能,也不能阻止人们编写更好的逆向工程工具。


编辑:DRM 毫无意义,以至于有些人只是为了好玩而破解它,并盗用损坏的 DRM 版本而不是同一软件的无 DRM 版本。一个关于 DRM 绝望的有趣故事,来自上面链接的维基百科文章(强调):

[CEO of CD Projekt Red, Marcin] Iwinski stated of DRM, "it's just over-complicating things. We release the game. It's cracked in two hours, it was no time for Witcher 2. What really surprised me is that the pirates didn't use the GOG [DRM-free] version, which was not protected. They took the SecuROM [commercial DRM] retail version, cracked it and said 'we cracked it' – meanwhile there's a non-secure version with a simultaneous release. You'd think the GOG version would be the one floating around."