我正在编写一个软件应用程序,用户需要购买并激活它。我需要有关如何开始编写强大的代码生成算法的建议,当然还有代码检查。我知道人们可以对代码进行逆向工程并制作密钥,但是,我的问题分为两部分:
通常,无论应用程序是否以这种方式破解,我如何开始编写算法来接受某个串行或字符串或组合。 (例如,这是正确的吗?例如:第一个数字是3-9,第二个数字应该是第一个--3,而第三个数字应该是第二个* + ....不管...... ??)
在不处理互联网的情况下,保护桌面应用程序免受盗版的最佳方法是什么。是算法(使逆向工程变得更难),保护源代码在应用程序安装到某个地方之后不被看到? ... ...
PS:也许值得一提的是我使用Java作为我的开发语言。 感谢
答案 0 :(得分:2)
听起来您可能会受益于public-key cryptography方法。
这可以分为两个子要点:
(在他说使用Java后编辑)
答案 1 :(得分:1)
对于许可证密钥,您可以使用公钥 - 私钥加密。通过这种方式,您可以将私钥嵌入到软件中并加密字符串,这对您的软件来说意味着什么(例如您的软件的哪些功能已获得许可)。或者,您可以嵌入公众并为软件提供具有特殊含义的字符串,并使用您的私钥对其进行签名。然后,软件可以检查签名是否有效。
编辑:使用公钥 - 私钥回答,labratmatt更快:)
显然,你的保护的第二部分需要处理你的软件难以拆解和调试(这是破解者检查你的软件并尝试绕过保护补丁或他们试图找出他们如何制作一个凯基)。这部分实际上要困难得多,并且涉及加密整个可执行文件的技术,并将其包装在运行时解密它的加载器中。加载器还可以使用各种技术来检测调试器的存在。
编辑:由于您提到应用程序是用JAVA编写的,因此这个加密和打包步骤更为重要,因为JAVA可以轻松地反编译成一个非常易读的形式。有一些“混淆器”程序搞乱了这些类,因此反编译器无法生成可读的代码,但是破解它仍然比破解编译成机器代码的东西容易得多。
如果您不想花时间开发自己的保护,您也可以使用商业保护软件之一。它们有很多可供选择,它们提供了许多保护方案(加密狗,基于时间的许可证......)
许多商业软件使用FlexNet,HASP,Wibu-key等软件包
答案 2 :(得分:0)
建议:加密提供仅许可功能的应用程序部分。用户需要您在购买时提供的密钥才能使用该部分代码。
如果您让用户在购买之前运行您想要保护的代码,则没有明显安全的离线解决方案。充其量,你可以阻止最随意的盗版。
答案 3 :(得分:0)
您还应该以一种密钥不能在两台不同的计算机上使用的方式来执行此操作。只是为了防止公司购买一把钥匙并将其用于许多安装。
答案 4 :(得分:0)
你也写过自己的JRE吗?构建一个安全,功能强大的激活系统,可以顺利处理您将遇到的各种用户场景(没有网络连接的人,防火墙,代理服务器等),并且已经在现场进行了全面测试,需要相当多的专业知识和时间。
作为此类系统的供应商,我们确实有自己的利益申报,但我们也有数据 - 我们看到许多公司信任开发人员,他们说他们可以组建许可系统,然后他们来回到我们身边,因为它从未做过他们需要的东西。本文(我的)扩展了问题:http://knol.google.com/k/dominic-haigh/issues-to-consider-before-building-your/2zijsseqiutxo/6#
答案 5 :(得分:0)
https://superuser.com/questions/14224/how-to-explain-drm-cannot-work/14254#14254
即使您确实对您的软件进行了非常强大的锁定,盗版者仍然会找到破解它并将其放在torrent网站上的方法。 (例如:孢子)
您正在谈论DRM,并且没有简单的方法(如果有的话)将海盗锁定盗版您的软件。此外,您正在与可以执行软件操作的免费产品竞争(总是如此),因此您应该更多地关注使您的软件易于安装和使用,而不是难以安装和使用超出您的预期。 / p>