如何保护我的Java应用程序不被复制?

30

我想使用PayPal出售我的Java应用程序。当收到付款时,将向客户发送一次性下载链接以获取我的应用程序。

我的问题是,如何防止人们将.jar文件发送给他们的朋友/在互联网上上传它?

显然,我需要在应用程序中添加某种检查,只允许其在一台计算机上运行。这又是另一个问题,我不希望客户在一台计算机上有限制,他们应该能够在家里和工作等地方运行它。

也许某种CD密钥可以解决问题?有没有适用于Java的CD密钥资源?或者我应该构建自己的算法?又来了另一个问题,反向工程..

请帮助我解决这个问题 :)


这个问题可能会有用 - https://dev59.com/RlDTa4cB1Zd3GeqPHC8s - Jon Freedman
6个回答

34
最常见的处理方式是:顾客支付费用,您生成唯一的解锁密钥并提供给顾客。该密钥应为有效的解锁密钥,并且应编码有关用户的身份信息。顾客可以使用该密钥在他们喜欢的所有计算机上安装,或者根据许可证允许的数量安装。
不必担心逆向工程。如果你的产品有一定的受欢迎程度,它将被盗版 - 如果你足够努力的话,你会在网上找到解锁密钥。如果愿意,您可以将此视为一种赞美 - 有人非常喜欢您的软件,所以他们才会偷窃它。我知道这样会让人感觉不舒服,但另一种选择是与盗版者进行武器竞赛,而你不会赢得胜利。最终,只有少数人会窃取软件,而这是您无法控制的。如果您的方案足够强大,您可以使用密钥的身份信息来跟踪谁最初发布了该密钥。

我需要一个在线查找密钥的服务,对吧? - cragiz
12
我非常喜欢第二段,特别是其中“你不可能击败海盗”的部分。如果他们想复制(或者用更负面的词来说,偷取)你的软件,他们就会这么做。你无法反对。 - Alba Mendez
您可以在线检查密钥,限制其安装次数,但反向工程程序不必这样做。 - Peter Lawrey
迈克尔-你有没有在Java中实现你的建议的示例? - Steve W
@AlbaMendez 在我看来,这是一个糟糕的建议。我以前使用过复制保护,它在阻止盗版方面帮了很多忙(产品很受欢迎)。我没有在种子上放任何副本,只有一些钥匙,我在未来版本中不断禁用它们。 - LegendLength

9
实际上有很多可以帮助管理许可证的解决方案,但真正的问题是所有这些都可以被破解。我个人尝试了最昂贵的和最便宜的。最终我自己开发了一个程序,并在每次运行软件时检查软件的电脑详细信息(mac id等)与我的服务器中记录的详细信息是否匹配。因为我的软件与互联网紧密联系,所以还好,但我相信总有一天会被破解。
你可能需要定期监管互联网,找到你的软件被盗版的地方。与普遍的观点相反,你实际上可以在大多数情况下阻止它们。只需向下载网站发送DMCA(大多数网站都会遵守),你就能在大约80%的情况下删除你的软件。我已经在我的软件上做过并体验过。有些人不会删除,但我发现,在我做这件事的1.5年里,我的销售额有所提高。
我还使用http://spotpiracy.com这样的服务,除了我自己的手动研究外,帮助我找到这些链接(我有一个专门负责这个的人)。 :)

6

每个人对这个问题都有自己的看法,因此可以期望得到很多不同的建议。以下是我的观点:

  • 1. 混淆你的代码(推荐使用proguard)
  • 2. 提供一个完全功能的免费版本进行试用
  • 3. 使用基于注册用户电子邮件或其他唯一信息的序列号例程

总体而言,您必须接受一定数量的盗版,但如果您的应用程序值得人们购买,人们会为其付费。诚实的人会保持诚实,而拷贝保护不会使不诚实的人变得诚实。


6
破解试用期版本要容易得多。你已经拥有完整版,所需的只是伪造时间。 - Colin Hebert
1
这涉及到我的几个观点 - 保持诚实的人诚实,混淆和接受你无法打败盗版。 - Paul Gregoire
4
并非完全正确。在某些情况下,实施不良的数字版权管理技术会阻止合法用户进行其应有的操作(根据法律规定),并导致他们破解您的数字版权管理技术(DRM)(或者将您的软件扔出窗外,并且再也不与您做生意!)。 - Stephen C
非常正确,Stephen,说得好。 - Paul Gregoire

3
在我看来,如果你不确定如何有效地保护你的源代码,那么不要试图根据硬件自己去进行哈希操作。这样很容易被破解,并且很可能会惹恼你的客户。
我建议你可以看看Atlassian是如何做的。他们恰好销售Java软件,并且似乎做得很好。http://www.atlassian.com/ 尝试下载例如JIRA并安装,这将让你了解他们的许可方案是如何工作的,以及用户可以从专业软件中合理期望什么。

2

1
在我以前的C ++时代,我使用MAC地址代码保护来防止盗版,非常好用,因为我总是强制操作系统重新读取真实的MAC地址,避免了MAC地址覆盖,所以几乎没有人窃取我的软件。那时候我直接访问本地资源。

但今天情况不同了,无论是在Java应用程序中还是在.class文件中,都可以轻松解码回原始源代码(是的,这是可能的,而且很容易找到工具来进行解码)。

总之,我认为保护Java程序免受盗版是不可能的。我找不到像以前黄金时代的C++一样的方法 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接