2010-08-01 53 views
6

我正在编写一个软件应用程序,用户需要购买许可证并激活它。我需要关于如何开始编写代码生成的强大算法以及代码检查的建议。我知道,人们可以反编译代码并进行密钥生成,不过,我的问题是两个部分:激活码算法 - 安全

  1. 在一般情况下,无论被破解这样的应用,我怎么可以开始写一个算法来接受特定的串行或字符串或组合。 (例如,这是正确的事情?例如:第一个数字是从3-9第二个应该是第一个 - 3,而第三个数字应该是第二个* + ....不管... ??)

  2. 保护桌面应用程序免受盗版而不涉及互联网的最佳方法是什么?它是否是算法(使逆向工程更难),在应用程序安装到某处后保护源代码不被看到? ...?

PS:也许值得一提的是我正在使用Java作为我的开发语言。 感谢

回答

0

建议:加密提供许可,只是功能的应用程序的一部分。用户需要您购买的密钥才能使用该代码部分。

如果您曾经让用户在购买之前运行您想要保护的代码,则没有明显安全的脱机解决方案。充其量,你可以阻止最随意的盗版。

1

对于许可证密钥,您可以使用公私钥加密。通过这种方式,您可以将私钥嵌入到软件中,并对字符串进行加密,这对您的软件意味着什么(例如软件的哪些功能获得许可)。或者你可以嵌入公众,并给软件一个特殊含义的字符串,并用你的私钥签名。然后软件可以检查签名是否有效。

编辑: labratmatt是与公 - 私密钥答案:)

的保护显然第二部分快将需要处理让你的软件很难拆卸和调试(这是饼干如何审视自己软件,并尝试绕过补丁的保护,或者他们试图弄清楚他们是如何制作keygen的)。这部分实际上更加困难,并且涉及诸如加密整个可执行文件的技术,并将其包装在加载程序中,该加载程序在运行时对其进行解密。加载器还可以使用各种技术来检测调试器的存在。

编辑:既然您提到应用程序是用JAVA编写的,那么这个加密和打包步骤就显得尤为重要,因为JAVA可以很容易地反编译成一个非常容易理解的形式。有一些混淆器类型的混淆器程序会使得反编译器无法生成可读的代码,但是破解这些仍然比编译机器代码更容易。

如果你不想花时间开发自己的保护,你也可以使用商业保护软件之一。有相当多的人可供选择,它们提供了大量的保护方案(软件狗,基于时间的许可证,...)

大量的商业软件使用包状的FlexNet,HASP,WIBU-KEY

0

你还应该以某种方式来做到这一点,即一个密钥不能在两台不同的计算机上使用。只是为了防止一家公司购买一个密钥并将其用于许多安装。

+0

当然我会考虑的 – 2010-08-02 12:42:31

0

你也写过自己的JRE吗?建立一个安全,功能强大的激活系统,能够平稳处理您遇到的各种用户场景(没有网络连接,防火墙,代理服务器等的用户),并且已经在该领域进行了全面测试,这需要大量的专业知识和时间。

作为这类系统的供应商,我们确实有自我利益的声明,但我们也有数据 - 我们看到很多公司信任一位开发人员说他们可以将许可系统放在一起,然后他们回到我们身边,因为它从未做过他们需要的事情。这篇文章(矿)扩展了问题:http://knol.google.com/k/dominic-haigh/issues-to-consider-before-building-your/2zijsseqiutxo/6#

0

https://superuser.com/questions/14224/how-to-explain-drm-cannot-work/14254#14254

即使你没有把一个非常强大的锁在你的软件,盗版仍然会找到一个方法来破解它,并把它放在一个torrent网站。 (例如:孢子)

您正在谈论DRM,并且没有简单的方法(如果有的话)将盗版锁定在盗版软件之外。此外,您正在与可以完成您的软件(免费)的免费产品竞争,因此您应该更专注于使您的软件易于安装和使用,而不是难以安装和使用超出您的预期。