假设我编写了一个程序并希望将其分发给人们。我希望能够在安装期间向用户请求序列号,这将验证他们是否拥有软件的许可副本。此外,我希望序列号存储他们可以访问的软件版本以及许可证何时到期。
我至少可以想到两种概念性方法来实现这一点:
我最感兴趣的是第二种方法。使用什么技术将此信息编码为序列号?如果你能给出一个简短的概述,那就太好了。否则,你能推荐一些讨论这个的好书或网站吗?
我觉得奇怪的是,在我编码的这些年里,我从未真正见过这些技术的实现或描述。
最佳答案
您正在考虑做的基本上是创建您自己的许可模块。没有错,如果您自己动手,它将是免费的(只是您编写和调试它的时间)。但是,破解将非常简单,因此如果您这样做是为了获得某种许可合规性(即复制保护),我不会打扰。
你打算以某种方式将它绑定(bind)到物理机上吗?一种方法是获取 CPU 序列号、HD 序列号、MAC 地址等或上述的某种组合,将它们散列并在启动时使用散列来检查以确保许可证有效。当然,如果用户更改任何内容,检查将失败,他们可能会因为他们的软件不再运行而感到恼火,即使他们拥有有效的许可证。
如果您这样做是为了防止非法复制或使用,您提议的模式通常很容易破解——破解者会查找您检查正确许可证的位置,然后修补 asm 代码以绕过它或总是返回一个积极的。如果您的应用程序是 .NET,他们可以只反向到源代码并删除许可证检查部分。
免责声明:我在一家许可证管理/复制保护工具公司 ([Wibu-Systems]) 1 工作,这就是我们所做的一切,所以我们知道击败大多数系统是多么容易。
我推荐以下三种方法之一:
关于password-protection - 软件序列号的实现,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5562234/