制作商用 Java 软件 (DRM)

我打算制作一些软件通过互联网销售。我以前只创建过开源,所以我真的不知道如何保护它不被破解和作为warez分发。请记住,我知道像两个程序一样,它们要么没有被破解,要么没有真正有用,我决定唯一或多或少可靠的方法可能看起来像这样:

  1. 连接到服务器并提供许可信息和某种硬件摘要信息
  2. 如果一切正常,服务器将返回绑定到该PC的程序的一些关键缺失部分以及2天的使用限制
  3. 那些关键的东西不会保存到硬盘驱动器上,所以每次程序启动时都会下载它,如果程序运行超过2天,数据会再次下载
  4. 如果从不同的计算机使用相同的信息,请暂停客户帐户

对此,你怎么看?这似乎有点限制,但我最好先减少销售,然后最终看到我珍贵的杀手级应用程序免费下载。无论如何,首先我需要一些基本的理论/教程/指南,关于如何确保用户只使用某个Java应用程序,如果他已经付费,所以请建议一些。

谢谢


答案 1

我为一家销售受保护的Java软件的公司工作。

我不会对用户身份验证方案发表评论,但我可以对在线许可证检查发表评论。

不要让它“工作两天”:这就是我盗版大多数软件的方式......虚拟机设置“及时”并设置外部防火墙,以便它不再“打电话回家”(即:只允许它联系服务器一次,以获取试用密钥),始终从软件新安装和宾果游戏的角度重新构想,30天试用(或两天试用)已成为终身试用。我为什么要这样做?要了解如何更好地保护我们的应用程序,当然;)(好吧,好吧,我也只是为了好玩而这样做)

我们在商业Java软件中所做的是检查每个初创公司的许可证。

我们有数百名客户,没有人对此感到不满。一次也没有。我们在每次运行时生成一个唯一的类,该类在每次运行时都不同,这既取决于客户端启动的唯一内容,也取决于在服务器端生成一次的内容。

除此之外,让应用程序在每次启动时联系您的服务器是收集分析的好方法:下载与试用比率,nb每次试用的平均启动次数等。而且它不再令人讨厌,就像在每个网页上都有一个Urchin / Google JavaScript跟踪器一样令人讨厌。

只需向人们清楚地表明您的软件执行在线许可证检查:我们有一个巨大的复选框,无论是打开还是关闭,都说:“在线许可证验证:正常/失败”。就是这样。人们知道有一张支票。如果他们不喜欢它,他们就会去使用劣质的竞争对手产品,生活很好。

人们习惯于生活在一个有线的世界里。

您多久可以因为互联网连接中断而无法访问GMail?您有多少次因为互联网连接中断而无法访问FaceBook或SO?

要点是:根据服务器端进行尽可能多的计算:

  • 许可证检查
  • 保存用户首选项
  • 备份应用程序生成的数据
  • 等。

没有人会抱怨。你会有0.1%的用户抱怨,无论如何你不想要这些用户:他们是那个会抱怨其他事情并在网上发布关于你的应用的负面反馈的人。你最好让他们根本不使用你的软件,并抱怨它需要一个始终在线的互联网连接(99.99%的目标人群,因此他们不会关心投诉),而不是真正让他们使用该应用程序,并抱怨与您的应用程序相关的其他事情。

关于反编译,.class通常可以反编译回.java除非您使用的代码流混淆器生成有效的字节码,但无法从.java文件生成(因此不可能取回有效的.java文件)。

字符串混淆器有助于使其更难弄清楚。

源代码混淆器有助于使其更难弄清楚。

像免费的Proguard这样的字节码混淆器使得它更难(并且产生更快的代码,在移动世界中尤其明显)。

如果您只发布Windows / Linux,那么您可以使用Java到本机转换器,例如Excelsior Jet(对于初创公司来说不是免费的,而且有点昂贵,但它会产生本机代码,您根本无法找到.java文件)。

作为一个有趣的旁注,你会看到人们试图搞砸你的在线服务器......在大约30个beta测试人员中,我们已经有人(我们知道试用的一部分)试图盗版我们的在线服务器。


答案 2

我很抱歉拒绝了你,但首先你应该知道你想建立什么;那么你应该证明你的想法不仅有效,而且还受到用户的喜爱,以至于他们想要盗版它。第三,您必须确保为使其“安全”而投入的时间实际上值得应用程序的价值。

如果你以一美元的价格卖掉它,而你只卖了十本,你花了100个小时来确保它的安全,你做数学计算,告诉我你的时间是否值得那一点点钱。

这里带回家的信息是:一切都可以被破解或复制。最后,有比我们聪明的人这样做(iPhone破解,数字电视,游戏等),没有人找到银弹。您唯一能做的就是使破解应用程序变得更加困难(通常以牺牲可用性,易于安装以及在某些使用方案中偷工减料为代价)。问问自己是否值得麻烦,这总是一个很好的起点。


推荐