2009-02-17 70 views
5

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

  1. 强制用户在每次程序启动时间验证到母船与一个用户名/密码。

  2. 只需在用户PC上的某个地方(隐藏?)安装许可证密钥,然后他们已经注册并付款。在运行时,验证是否安装了有效的许可证密钥。

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

这里的一个问题是,一旦安装了该应用程序,没有任何运行时需要对应用程序联系母船,不是检查使用Java Webstart的应用程序更新等。应用程序执行的所有操作都是在本地执行的,并使用swing将结果显示给用户。因此,涉及母船的任何解决方案基本上都意味着建立一个服务器基础设施,仅用于许可证验证。

我想我正在寻找的是基于java的东西,至少有点安全,易于部署,对用户来说不是一件痛苦的事情。你使用了什么安全/授权方法?

编辑:我应该补充一点,我并不一定会寻找一颗银子弹来防止绝对每个人都击败安全。总会有人有足够的时间来找到完成任务的方法。我不太关心这些人。我基本上是想让一个临时用户很难复制许可密钥并发送给他的好友。正确实施,解决方案应该说服临时用户购买它比较简单。

+0

计算您的硬件指纹并与母舰进行谈判仅用于许可目的的软件?听起来像一个**的痛苦,并让我想起那个Windows激活的东西。请不要这样做。 – 2009-11-25 22:08:14

回答

10

我会说(2)是你最好的选择。如果用户购买了新的主板,那么您已经说过(1),(3)会导致问题。 (2)对合理的计算机用户不会有太大的保护,但它也不应该引起太多问题。

但是最终,你所能做的任何事情都不会阻止一个确定的用户盗用你的软件。

事实上,最有效的反盗版软件的发展战略是所有最简单的一个:

  1. 有一个伟大的产品再用。
  2. 为此收取公平的价格。

- Jeff Atwood

9

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

您还有其他的选择,但:

  1. 有一个有吸引力的定价模式,并使其非常简单人们购买你的产品。如果您拥有足够低的进入门槛,并以尊重和信任的态度对待客户,而不是怀疑,则可以将盗版风险降至最低。
  2. 将您的产品绑定到某种在线服务上。放弃客户,但收取服务费用。这就是暴雪在魔兽世界中所做的,这也是少数几个没有盗版问题的游戏之一(他们有很多其他问题,但这是另一回事)。
+0

只是一个挑剔的问题,但第二点的例子是错误的:暴雪向客户收取您的费用,他们确实存在盗版问题,这就是为什么他们追求编写服务器仿真软件的人。 – Powerlord 2009-02-17 17:36:07

+0

他们确实存在盗版问题,但这些人无法获得与支付费用相同的经历。他们被困在人口较少的伪劣私人服务器上。 – ryeguy 2009-02-17 17:42:23

+0

我的关于魔兽世界的例子可能并不完全准确,但我的观点是,在PC游戏公司中,暴雪的盗版问题比其他大多数问题要少得多(与Crysis这个盗版率很高的旗舰游戏的惨淡销量相比)。 – 2009-02-18 08:02:28

3

老实说,除非该计划实际上是从服务器需要数据的功能(如弗雷德邻说,魔兽世界的需要;并且是真实的),那么就什么你可以做客户端,这将是完全傻瓜证明。你有3个想法可以很容易绕过。服务器/登录可能有点困难,但我甚至看到裂缝竟然在本地创建了一个虚拟登录服务器,因此程序认为它正在进行身份验证。

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

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

2

的三种溶液:

首先需要的网络连接做任何事情。如果用户不能脱机使用,用户不会很高兴。谷歌必须处理它的办公软件。除非位置是隐藏的,并且隐藏的位置有其自身的困难(例如,一些人不喜欢安装喜欢将事物隐藏在不同位置的应用程序),并且不是很'''',而是不''''''''''''''''''''''''''''''。无论如何都不安全。

第三个可能会工作,直到用户做了一些改变指纹的计算机(我不知道你会检查什么),或者想要将应用程序从一台计算机移动到替换。那么你会有一个潜在的愤怒用户。 (“我更换了硬盘驱动器/移动到不同的局域网连接/有系统故障/无论什么,并且[删除]已停止工作!”)

因此,虽然2号不会导致用户问题,它不适用于复制保护方案。数字1和3会让你不快乐的用户,会给你带来一定的麻烦,并且不会阻止有决心的人复制它。

3

我最好的选择,实现一个简单的解决方案,不含税你太多,而且不会使顾客愤怒,劝阻偶尔盗版。任何更复杂的事情,这将是一场军备竞赛。一个太难赢了。

1

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

一个办法是提供个人许可证 - 适用于个人使用的所有机器。这无论好坏,都是人们认为软件“应该”被销售的方式。如果你让他们为他们使用的每台机器付费,他们会觉得你正在利用,那就是他们开始在网络上拖动别人的许可密钥。

如果合适,您还可以提供企业许可证,或10包许可证,或其他任何折扣,以单独购买。这让个人和组织都能合法地使用你的软件,而不会让他们觉得你不合理地挤压它们。

0

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

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

0

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

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

所以:我不会使用那些时常回家的东西。 (关于许可证密钥:如果一个密钥只与特定的注册名称一起工作,并且如果该名称显示在某个关于对话框中,那么我不会担心使其依赖于硬件。当然,有几个注册名称和他们的密钥将被共享,但任何更花哨是不值得的努力。如果我的Mac失败,然后我不会觉得看到我的一键式时间机器在新硬件上恢复,使您的应用程序无法启动。)