软件公司如何知道使用其软件时输入的序列号是有效的还是由密钥生成器创建的?
假设密钥生成器正在生成一个可以输入到其程序中的许可证号。密钥将被接受,并授予用户对其软件的完全访问权限。之后,他们会知道用户正在使用其软件的非法许可副本吗?
答案1
最常见的方法是让程序只执行实际许可证算法的一部分。例如,假设许可证如下所示:UUUU-VVVV-WWWW-XXXX-YYYY-ZZZZ
。许可证算法可能要求该YYYY-ZZZZ
部分具有特定的结构。但就程序而言,任何UUUU-VVVV-WWWW-XXXX
部分都是允许的。
但是,制造商可能会以可测试的方式选择序列号。例如,UUUU
可能会识别经销商、版本或产品 ID。VVVV-WWWW
可能会按顺序颁发多个许可证。但零件XXXX
可能基于零件的安全哈希值UUUU-VVVV-WWWW
。
由于安全哈希未在程序中实现或由程序测试,因此可以完全保密。所有合法密钥都具有正确的安全哈希,但具有无效安全哈希但部分正确的密钥YYYY-ZZZZ
将在软件中起作用,但必须由密钥生成器生成。
通常,程序会将其密钥的一部分嵌入到事物中。在此示例中,可能是部分UUUU-VVVV-WWWW-XXXX-YYY
。这足以说明它属于谁的许可证(如果它是合法的)以及它是否由密钥生成器生成,但不足以使用许可证来运行软件。
答案2
通常通过监视您。如今,许多公司都希望用户始终保持活跃的互联网连接。通常软件会尝试自动更新自身或检查更新并通知用户。那时,它还可能将其序列号或它使用的任何类型的标识发送到主服务器,并且服务器将通知软件该号码是否由已知的密钥生成器生成,或者是否被其他几台计算机使用等等。有时软件可能仅连接到互联网以检查其是否合法。
在某些情况下,软件安装程序本身可能会连接到互联网以获取最新的补丁和序列黑名单。在这种情况下,两派之间开始竞争:一派认为与邻居共享软件(可能)是非法的,邻居通常会尝试制作新的注册机;另一派是软件开发人员,他们通常会尝试确定注册机如何生成号码,并尽最大努力将注册机可能生成的所有号码添加到黑名单中。
有时软件可能会在补丁中包含黑名单或序列号。一些软件开发人员可能会试图煽动用户进行积极的互联网连接或下载补丁。例如,许多游戏经常会有补丁,这些补丁会带来各种改进,或者它们可能有一些额外的可下载内容,只有使用游戏内下载器才能使用有效的序列号访问。
一些更“严肃”的软件可能具有仅在互联网连接下才可使用的附加功能。例如,Mathematica 8 可以使用 Wolfram|Alpha 进行一些计算或识别自然语言输入。软件在没有这些额外功能的情况下仍可使用,但用户无法获得完整的体验。