5

我有这个打算通过互联网销售的 java swing 应用程序。目前我倾向于使用 java webstart 部署应用程序。该产品将被授权用户一次只能在一台计算机上使用该程序。我担心这个模型的盗版。我想安装一些安全功能来强制执行许可模式。目标是至少使许可用户难以将已安装的产品(包括许可密钥)复制给未许可用户。以下是我现在正在查看的选项:

  1. 每次启动程序时,强制用户使用用户名/密码向母船进行身份验证。

  2. 在用户注册并付款后,只需在用户 PC 的某处(隐藏?)安装许可证密钥。在运行时,验证是否安装了有效的许可证密钥。

  3. 使用/构建基于用户计算机硬件指纹的安全包。每次启动应用程序时都会计算此指纹,并使用某种散列与本地安装的许可证密钥进行比较。此许可证密钥将仅对此硬件指纹有效。

这里的问题之一是,一旦安装了这个应用程序,除了使用 java webstart 检查应用程序更新之外,应用程序不需要任何运行时联系母船。应用程序在本地执行的所有操作并使用 swing 向用户显示结果。因此,任何涉及母船的解决方案基本上都意味着构建一个服务器基础设施,其唯一目的是进行许可证验证。

我想我正在寻找的是基于 java 的东西,它至少有点安全、易于部署并且对用户来说并不痛苦。您使用了什么安全/许可方法?

编辑:我应该补充一点,我不一定要寻找灵丹妙药来防止绝对每个人都击败安全性。总会有人有足够的时间来找到完成它的方法。我不是很关心这些人。我基本上是想让临时用户难以简单地复制许可证密钥并将其发送给他的好友。如果实施得当,该解决方案应该让普通用户相信购买它更简单。

4

8 回答 8

9

IMO,试图在客户端强制执行复制保护可能比它的价值更麻烦。您将花费无数小时试图超越您的客户(您可以花费数小时来改进您的产品),但最终海盗总是会获胜。

不过,您还有其他选择:

  1. 有一个有吸引力的定价模式,让人们购买你的产品变得非常简单。如果您的进入门槛足够低,并且尊重和信任而不是怀疑地对待您的客户,那么您就可以最大限度地降低盗版风险。
  2. 将您的产品与某种在线服务联系起来。赠送客户,但收取服务费。这就是暴雪对《魔兽世界》所做的事情,也是少数没有盗版问题的游戏之一(他们还有很多其他问题,但那是另一回事了)。
于 2009-02-17T17:15:27.440 回答
9

我会说(2)是你最好的选择。您已经说服自己放弃(1),并且(3)如果用户购买新主板会导致问题。(2) 不会对相当精通计算机的用户提供太多保护,但它也不应该引起太多问题。

但最终,您无法阻止坚定的用户盗版您的软件。

事实上,最有效的反盗版软件开发策略是最简单的一种:

  1. 有一个很棒的产品。
  2. 收取合理的价格。

——杰夫·阿特伍德

于 2009-02-17T17:41:13.523 回答
3

老实说,除非程序确实需要来自服务器的数据才能运行(正如 fred-o 所说的,魔兽世界需要;而且是真的),否则您无法在客户端做任何事情来完全证明自己是万无一失的。您拥有的所有 3 个想法都可以轻松绕过。服务器/登录可能有点困难,但我什至看到裂缝甚至在本地创建一个虚拟登录服务器,因此程序认为它正在被验证。

防止盗版的唯一真正方法是拥有一些程序需要运行的服务器端逻辑。例如 - 您正在制作调整图像大小的软件(我知道,我知道)。如果原始图像被运送到您的服务器并在那里调整大小然后发送回客户端(而不是客户端进行大小调整),那么您将是安全的,因为您的服务器可以很容易地通过某种登录系统得到保护. 如果没有有效的用户名或密码(或者如果他们试图生成一个假的),该程序将毫无用处。

如果您实现客户端功能,无论您做什么,都可以访问它。

于 2009-02-17T17:22:53.677 回答
3

我最好的选择是实施一个简单的解决方案,既不会对您征税过多,也不会让客户生气,以阻止偶尔的盗版。任何更复杂的事情都将是一场军备竞赛。一个太难赢的。

于 2009-02-17T17:41:27.970 回答
2

在您的三个解决方案中:

第一个需要网络连接才能做任何事情。如果他们不能离线使用它,用户将不会高兴。谷歌不得不为其办公软件处理这个问题。

第二个是没有太多的复制保护,除非该位置是隐藏的,并且隐藏的位置有其自身的困难(例如,有些人不喜欢安装喜欢在不同位置隐藏东西的应用程序),并且无论如何也不安全。

第三种可能会起作用,直到用户对计算机进行更改指纹的操作(我不知道您要检查什么),或者想要将应用程序从一台计算机移动到替代计算机。然后你会有一个潜在的愤怒用户。(“我更换了硬盘驱动器/移动到了不同的 LAN 连接/出现了系统故障/无论如何,[脏话删除]的东西刚刚停止工作!”)

因此,虽然第 2 项不太可能导致用户出现问题,但它不适用于大部分复制保护方案。数字 1 和 3 会让你的用户不满意,会给你带来一定的麻烦,而且无论如何都不会阻止有决心的人复制它。

于 2009-02-17T17:34:16.223 回答
1

我会认真重新考虑许可要求,因为执行它们会失去合法客户。如果你是一家大公司,你可以负担得起,但如果你是初创公司或个人,你就不能。

一种出路是提供个人许可证——适用于个人使用的所有机器。无论好坏,这都是人们认为软件“应该”销售的方式。如果你让他们为他们使用的每台机器付费,他们会觉得你在利用,那就是他们开始在网络上寻找其他人的许可证密钥的时候。

如果合适,您还可以提供公司许可证或 10 包许可证或其他任何东西,以比单独购买它们提供折扣。这为个人和组织提供了合法使用您的软件的方法,不会让他们觉得您在不合理地挤压他们。

于 2009-02-17T18:06:45.803 回答
0

考虑使用 JNLP 在您的应用程序中设置时间限制组件 - 许可证模块?- 必须通过互联网定期更新。更新版本的可访问性需要注册。让

有一个较长的宽限期,允许用户在禁用功能之前离线(或不想升级)一段时间。

于 2009-07-12T10:41:23.617 回答
0

除非应用程序已经需要连接到网络来完成它的实际工作,否则打电话回家很容易被归类为间谍软件。

而且我不确定这是否适用于 Java Web Start,但由于防火墙可能会阻止您的应用程序打电话回家,您的付费客户可能仍然会看到他们的应用程序被阻止。

所以:我不会使用时不时打电话回家的东西。

(至于许可证密钥:如果密钥仅适用于特定的注册名称,并且如果该名称显示在某些“关于”对话框中,那么我不会担心使其依赖于硬件。当然,一些注册名称及其密钥将是共享,但任何花哨的东西都不值得付出努力。如果我的 Mac 失败了,那么我不会很高兴看到我在新硬件上的一键 Time Machine 恢复使您的应用程序无法启动。)

于 2009-07-12T11:12:05.130 回答