我打算制作一些通过互联网销售的软件.我之前只创建过开源,所以我真的不知道如何保护它免受破解和分发为warez.请记住,我知道两个程序既没有破解或没有真正有用,我认为唯一或多或少可靠的方式可能如下所示:
连接到服务器并提供许可信息和某种硬件摘要信息
如果一切正常,服务器将返回绑定到该特定PC的程序的一些关键缺失部分以及2天的使用限制
关键的东西不会保存到硬盘上,所以每次程序启动时都会下载,如果程序运行超过2天,数据会再次下载
如果从不同的计算机使用相同的信息,请暂停客户帐户
你怎么看待这件事?这似乎有点限制,但我最好先减少销售,然后最终免费下载我的宝贝杀手级应用程序.无论如何,首先我需要一些基本的理论/教程/指南,关于如何确保用户只使用某个Java应用程序,如果他已付费,所以请建议一些.
谢谢
我在一家销售受保护 Java软件的公司工作.
我不会评论用户身份验证的方案,但我可以评论在线许可证检查.
不要让它"工作两天":这就是我盗版大多数软件的方式......虚拟机设置"及时"和外部防火墙,以便它不再"打电话回家"(即:仅允许它要联系服务器一次,以获得试用密钥),始终从软件刚刚安装和宾果游戏重新映射,30天试用(或两天试用)已成为终身试用.为什么我这样做?要学习如何更好地保护我们的应用程序当然;)(好吧,好吧,我这样做只是为了好玩)
我们在商业Java软件中所做的是在每次启动时检查许可证.
我们有数以百计的客户,没有人曾经为此而烦恼过.不止一次.我们在每次运行时生成一个唯一的类,它在每次运行时都是不同的,这取决于客户端的启动和服务器端生成的事物的唯一性.
除了让应用程序在每次发布时都与您的服务器联系,这是收集分析的一种很好的方式:下载到试用率,每次试用的平均启动次数等等.这并不比在每个网页上都有Urchin/Google JavaScript跟踪器更令人讨厌很讨厌.
简单地向人们说明您的软件执行在线许可证检查:我们打开或关闭了一个巨大的复选框:"在线许可证验证:确定/失败".就是这样.人们知道有一张支票.如果他们不喜欢它,他们会使用劣质竞争产品,生活也很好.
人们习惯于生活在有线世界中.
您多久没有访问GMail,因为您的Internet连接已关闭?您多久没有访问FaceBook或SO,因为您的Internet连接已关闭?
要点是:根据服务器端进行尽可能多的计算:
执照检查
保存用户首选项
备份您的应用生成的数据
等等
没有人会抱怨.您将有0.1%的用户投诉,无论如何您不希望这些用户:他们会抱怨其他事情,并在线发布有关您的应用的负面反馈.你最好让他们根本不使用你的软件,并抱怨它需要一个永远在线的互联网连接(99.99%的目标人群,因此他们不会关心抱怨),而不是实际让他们使用应用程序,并抱怨与您的应用程序相关的其他事情.
关于反编译,.class通常可以反编译回.java,除非您使用的是生成有效字节码的代码流混淆器,但无法从.java文件生成(因此无法获取有效的.java文件) ).
字符串混淆器有助于使其更难理解.
源代码混淆器有助于使其更难理解.
类似于免费Proguard的字节码混淆器使其变得更难(并产生更快的代码,特别是在移动世界中引人注目).
如果您只发布Windows/Linux,那么您可以使用像Excelsior Jet这样的Java到本机转换器(对于初创公司而言,这种转换器不是免费且有点贵,但它会生成本机代码,您根本无法找到.java文件).
作为一个有趣的旁注,你会看到有人试图弄乱你的在线服务器...在大约30名beta测试者中,我们已经有人(我们知道试验的哪一部分)试图盗用我们的在线服务器.
我很抱歉拒绝你,但首先你应该知道你想要建立什么; 那么你应该证明你的想法不仅有效,而且还被用户所喜爱,以至于他们想要盗版它.第三,你必须确保你投入使其"安全"的时间实际上值得应用程序的价值.
如果你以1美元的价格出售它,而你只卖了10份,并且你花了100个小时使它变得安全,你就算数学并告诉我你的时间是否值得这么少钱.
这里的带回家信息是:一切都可以被破解或复制.最后有比我们更聪明的人(iPhone破解,数字电视,游戏等),没有人找到银弹.你唯一能做的就是让你的应用程序更难破解(通常以可用性,易于安装和某些使用场景的偷工减料为代价).问自己是否值得麻烦,这始终是一个很好的起点.
不要打扰.
游戏行业几十年来一直在与盗版作斗争.具有中央服务器的在线多人游戏通常需要订阅才能玩.该模型对盗版具有相当的抵抗力.尽管在DRM上进行了无数次尝试,但几乎所有其他游戏都受到严重盗版.
您的应用程序将被破解和盗版,无论您使用何种语言编写,以及您使用哪些工具来防止它.如果您的DRM确实有效,那么盗版它的人仍然不会购买它.此外,合法用户更喜欢其他没有侵入式DRM的产品.如果没有竞争产品而你的产品有任何市场可言,那么有人会创造一个.