如何在Delphi中生成用户注册密钥?

时间:2012-01-09 18:59:34

标签: delphi user-registration

对于我目前的应用程序,我使用一个非常简单的方案来注册新用户。当新用户注册时,将使用密钥发送电子邮件。为了检查这个密钥是否正确,计算了一种校验和(3-7-11数字检查),它被添加为密钥的最后2位数。没有检查密钥的任何进一步有效性。应用程序不会检查密钥是否失效。

这是一个简单的方案,有人花时间通过反汇编代码破解它。我想为我的新应用程序使用另一种方案,但我不确定最好的方法是什么。

  • 我可以使用Delphi库吗?
  • 建议在密钥中使用一些用户提供的信息,比如他的名字吗?
  • 是否有注册用户的最佳实践方式?
  • 我忘记了什么?

某些注册方案要求应用程序每次在网络服务器检查密钥是否仍然有效。我宁愿不去那么远,因为这需要在服务器端付出很多努力。

非常欢迎任何有关注册新用户的强大方式的建议或链接。

4 个答案:

答案 0 :(得分:11)

更好的注册方案基于非对称加密(通常是RSA算法)。这个想法是只有你可以生成一个有效的密钥,而每个人都可以检查密钥是否有效(非对称加密允许这个技巧)。因此,当您在种子上看到带有有效密钥的程序时,您只需取消对获得此密钥的客户的支持。

答案 1 :(得分:4)

Delphi和非Delphi库(即Protexis)可用于保护您的软件 - 请记住,几乎任何与C一起使用的东西都可以与Delphi一起使用。但是声音复制保护方案可能很难实现。一个简单的密钥可能不起作用,通常它与机器指纹一起使用,只允许它在给定的系统上使用。

一个好的密钥生成器算法应该生成不易预测的密钥,但是如果有效则可以检查。周围有不同的,没有“通用”,取决于您的需求,有些还可能包括激活或到期信息的功能。一些键可以是字符串,其他键可以是整个许可文件(如Delphi本身使用的那些)。无论如何,代码可以被反汇编以试图猜测算法,一些混淆它的技术并使其更难理解可以使用。

此外,一个简单的密钥检查是不够的,因为它可以很容易地绕过修补程序可执行文件。如果你真的需要复制保护,你应该在代码周围分散检查,可能使用密钥加密然后解密数据或代码部分 - 它无法保护你免受keygen的影响,并且需要更多的代码更改,它不是那么简单在启动时调用一个函数。

保护级别取决于您。如果您只需要一个简单的注册机制,并且您不太关心您的软件被破解,那么您可以使用一个简单的注册机制。如果你需要一个更安全的那个,那么就有更复杂的一个。

答案 2 :(得分:4)

如果您的目标是强迫人们从互联网上下载破解的EXE而不是从互联网上下载密钥生成器,那么非对称加密就是您的答案。

如果您的目标是能够取消已经发布的序列号,限制安装次数,或强制用户拥有真正的“付费”序列号,那么激活就是您的答案。不过,如果他们破解你的EXE,他们可以解决这个问题。

你只能控制某人破坏你的EXE。我们必须接受这一点并继续前进。我们必须找出其他方式来接触我们的客户,例如更实惠的版本,增值支持选项,网络服务以及让用户相信我们的软件价格公平的其他方式,以及支付的好处

在我的最新版本中,我使用激活,因此序列号会随机生成,但会检查其唯一性,并与电子邮件地址相关联。

完成所有这些后,该应用程序只需4.99美元,但没有个人支持。我们的目标是让它变得如此实惠,如果他们想要使用它,即使只是一次,它也是一个很好的价值。

答案 3 :(得分:2)

我们已经使用Oreans的WinLicense两年了,并且非常满意。它们处理密钥生成(嵌入了用户名),超时的试用版,硬件密钥(发送它们的密钥对于他们的计算机是唯一的)和VM检测。它们还使用各种其他技术来使您的代码更难被反汇编,包括将您选择的代码包装在它们提供的加密VM中。

如果您确定它们“被盗”,您也可以禁用特定密钥。完成此操作后,您提供的未来更新将不再使用这些密钥运行。

我们还会在某些时间使用我们的软件“电话回家”来查看他们的密钥是否被盗。

任何保护计划都可以由具有足够坚定和熟练程度的人打破。但是,我们对WinLicense给予我们的安全程度感到满意。他们的支持也非常好。该库可从Delphi调用。