【发布时间】:2019-02-24 07:42:47
【问题描述】:
我创建了一个 JavaFX 应用程序。现在我想保护它不被复制到其他计算机。更详细地说,我将应用程序出售给一位客户,安装此应用程序后,我需要确保它不会从一台计算机复制到另一台计算机。
如何防止他人复制应用程序?
【问题讨论】:
我创建了一个 JavaFX 应用程序。现在我想保护它不被复制到其他计算机。更详细地说,我将应用程序出售给一位客户,安装此应用程序后,我需要确保它不会从一台计算机复制到另一台计算机。
如何防止他人复制应用程序?
【问题讨论】:
规则是:您不能阻止在其计算机上具有管理员权限的用户复制该计算机上存在的任何文件的位。句号。
你能做的最好的事情是找到一个硬件标识符来识别特定的机器,并混淆在某个地方(在可执行文件本身或辅助文件中,甚至通过网络您拥有的服务器)。
当程序运行时,它可以将硬件标识符与其存储的标识符进行比较,如果它们不同则阻塞。
限制:
TL/DR:您正在尝试使用技术方法来解决法律问题。如果可以,请避免。我记得在并行端口上需要特殊硬件的旧程序。这引起了很多噩梦,因为突然出现问题,我所在的组织决定不再购买需要硬件密钥的软件,即使价格更便宜。用户体验确实是一个选择标准,而那些@#&! 安全工具提供非常糟糕的用户体验。
【讨论】:
您正在寻找的术语是 DRM ("Digital Rights management"),它在很大程度上是一个失败的原因。实现牢不可破的 DRM 是不可能的,因为一台计算机可以做的任何事情另一台计算机也可以做,所以没有办法防止有人假装“哦,它仍然是同一台计算机”。可以尝试检查硬件相似性和序列号等操作,但这些都可以被欺骗(至少在理论上),并且在实践中也会破坏合法用例,例如更换故障硬盘。
阻止某人简单地修改您的程序以删除或削弱 DRM 也是不可能的。甚至像加密二进制的整个非 DRM 实现部分并且仅在 DRM 检查通过时才获得解密密钥这样的技术是不够的,因为可以从进程的内存中捕获解密密钥并用于解密加密的部分,然后可以丢弃 DRM 部分。混淆会使执行此操作变得更加困难,但如果计算机可以执行程序,那么人类可以(有足够的时间和/或有用的软件)对程序进行逆向工程。
所有这些混淆和 DRM 所做的只是让某人需要更长的时间才能成功地对程序进行逆向工程/盗版。从理论上讲,您可能会提高难度,鉴于目前可用的工具,地球上没有任何人可以对软件进行足够的逆向工程以在比克隆程序行为更短的时间内删除 DRM ,但你不能让它成为不可能,也不能阻止人们编写更好的逆向工程工具。
编辑:DRM 毫无意义,以至于有些人只是为了好玩而破坏它,并盗版损坏的 DRM 版本,而不是相同软件的无 DRM 版本。一个关于 DRM 绝望的有趣故事,来自上面链接的 Wikipedia 文章(强调添加):
[CD Projekt Red 首席执行官 Marcin] Iwinski 谈到 DRM,“这只是过于复杂的事情。我们发布了游戏。它在两个小时内就破解了,来不及巫师 2。真正让我吃惊的是盗版者没有使用不受保护的 GOG [DRM-free] 版本。他们拿走了 SecuROM [商业 DRM] 零售版,破解它并说“我们破解了它” – 同时还有一个非安全版本,同时发布。你会认为 GOG 版本会是一个浮动的版本。”
【讨论】: