假设我编写了一个程序并希望将其分发给人们。我希望能够在安装期间向用户请求序列号,这将验证他们是否拥有软件的许可副本。此外,我希望序列号存储他们可以访问的软件版本以及许可证何时到期。

我至少可以想到两种概念性方法来实现这一点:

  • 在用户购买软件的服务器上生成一个序列号,并通过电子邮件发送给他们。该软件在安装过程中连接到服务器并激活产品。服务器返回许可权限和到期时间。串行没有特定的格式/数学规则,它只是根据服务器上的数据库进行检查。
  • 为客户生成序列号并将其通过电子邮件发送给他们。序列号有一些特殊的数学属性,允许程序检查它是否有效、它对应什么许可证以及它何时到期。

  • 我最感兴趣的是第二种方法。使用什么技术将此信息编码为序列号?如果你能给出一个简短的概述,那就太好了。否则,你能推荐一些讨论这个的好书或网站吗?

    我觉得奇怪的是,在我编码的这些年里,我从未真正见过这些技术的实现或描述。

    最佳答案

    您正在考虑做的基本上是创建您自己的许可模块。没有错,如果您自己动手,它将是免费的(只是您编写和调试它的时间)。但是,破解将非常简单,因此如果您这样做是为了获得某种许可合规性(即复制保护),我不会打扰。

    你打算以某种方式将它绑定(bind)到物理机上吗?一种方法是获取 CPU 序列号、HD 序列号、MAC 地址等或上述的某种组合,将它们散列并在启动时使用散列来检查以确保许可证有效。当然,如果用户更改任何内容,检查将失败,他们可能会因为他们的软件不再运行而感到恼火,即使他们拥有有效的许可证。

    如果您这样做是为了防止非法复制或使用,您提议的模式通常很容易破解——破解者会查找您检查正确许可证的位置,然后修补 asm 代码以绕过它或总是返回一个积极的。如果您的应用程序是 .NET,他们可以只反向到源代码并删除许可证检查部分。

    免责声明:我在一家许可证管理/复制保护工具公司 ([Wibu-Systems]) 1 工作,这就是我们所做的一切,所以我们知道击败大多数系统是多么容易。

    我推荐以下三种方法之一:

  • 让您的应用不 protected ,并希望您的销售与盗版的比例合理。
  • 滚动一个简单的系统,但要认识到如果软件有值(value),有人会快速轻松地破解它。为一些复杂的编码和维护做好准备,甚至可以做到这一点。
  • 购买商业质量的保护系统,如 CodeMeterHASPKeyLok 。有些比其他的更好(我们自然认为我们的最好),但没有一个是免费的。
  • 关于password-protection - 软件序列号的实现,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5562234/

    10-17 02:39