关于产品激活方案的问题

时间:2009-12-09 06:12:49

标签: licensing registration activation

典型的产品激活方案如下

  1. 一个独特的序列号。已分配给用户
  2. 为用户的计算机生成唯一的硬件ID。
  3. 在向供应商提供此信息后,供应商会发出激活码。

    我想知道激活码是如何生成的以及它的内容是什么。 一旦在用户PC上的应用程序中输入激活码,一般方案是什么,比如下次如何解码,存储,检查?

    由于

3 个答案:

答案 0 :(得分:5)

一种非常简单的方法是将PC的相关硬件列表编译成字符串,然后在其上运行MD5哈希。所以你的字符串可用于例如包含

"Pentium 4 Dual Core 3.8 GHz, HDD1: 320GB"
等 几乎所有语言都有许多免费的MD5哈希实现,你可以在Google上搜索它。

您没有说明您要定位的平台,但如果您使用的是Windows,则可以通过查询WMI或使用Windows API调用来获取PC的硬件配置。例如,要在WMI中查看的物理内存类是Win32_PhysicalMemory

首次安装软件时,会编译此哈希值,然后将其发送到激活服务器,激活服务器会发回一些仅与该哈希值匹配的相应代码。一个非常简单/无用的例子 - 假设硬件散列是123,并且检查算法是在添加硬件散列和激活代码之后所有数字应该是9,激活服务器将返回876.该程序将添加2编码并获得999,然后将其解锁以供使用。

程序会定期重新创建硬件哈希,将其添加到激活码中(仅在我的超级简单示例中),并确保它们仍然加起来。如果他们不这样做,产品可能会自行锁定并坚持重新激活。

但是:我强烈建议您不要使用这种复制保护方法。为什么不呢?

  • 每当用户升级硬件,重新安装他们的PC等时,您可能需要支付费用来帮助他们重新激活软件,并给用户带来不便。
  • 如果您停止使用激活服务器,产品或关闭公司,则可以有效关闭付费使用该产品的用户的访问权限。
  • 这几乎将用户的PC转变为硬件加密狗 - 这听起来似乎是一个好主意,但不鼓励用户购买软件

相反,我建议您使用注册方名称或公司名称的哈希值,并将其嵌入到程序中,以便很明显程序已注册到它们。是的,这在技术上允许他们更容易地复制软件。

底线是 - 如果您的软件对许多人来说真的很有价值,那么有人会绕过您的版权保护计划,无论它有多复杂。使用基于硬件配置的产品激活只会加剧您真正想要与之做生意的一组人 - 那些基本上诚实并希望合法使用您的产品的人。那些不提供有关合法软件的人会使用你的激活方案被破解的版本。

我个人鄙视购买任何产品,如果我更换我的电脑或公司关闭,我无法保证能够使用它。这有点像最近人们为他们的Kindles购买了George Orwell的1984年,然后当出现版权纠纷时,亚马逊远程删除了人们购买的这本书的所有副本。

只是我的2c。

答案 1 :(得分:1)

像迈克尔(托德)评论的那样,这些方法或方案因供应商而异。如果它真的是标准的,它可能更容易'破解',是吗?

我认为您的最终目标是保护您的软件免遭未经授权的使用?

以下是几个相关的SO帖子:
How do you protect your software from illegal distribution?
Methods to stop Software Piracy ?

更新:
更直接地回答OP的问题:

我想知道激活码是如何生成的以及它的内容是什么?
@:可以是序列号的专有散列/加密。与用户/产品/日期信息或其他任何东西混合在一起。

在用户PC上的应用程序中输入激活码后,一般方案是什么,比如下次如何解码,存储,检查?
@:该软件可能内部有一些算法可以理解这段代码,至少可以检查有效性。可以存储为文件,在注册表中,甚至可以嵌入到现有文件等中。

答案 2 :(得分:0)

我假设你问了这个问题,因为你想自己实现类似的东西。

在这里,我将概述一个可用于帮助保护所购软件合法性的方案。这有助于保护公司免受盗版侵害,并有助于保持客户的利益。有价值的购买合法且相对容易注册。

此方案通过跟踪三个单独的数据元素来工作:一个是自动生成的,一个是用户输入的,另一个是根据这两个数据计算出来的。当产品未被激活时,它可以使用一组减少的功能运行,也可以根本不运行。

该过程涉及与网站的通信,但是当网站不可用时,存在替代机制,使得用户仍然可以使用该软件而不会对许可问题感到沮丧。 方法

该软件使用三个基本数据元素:

  • [IC]安装代码:自动生成的代码;这可以是由特定安装生成的任何内容,并且是安装所特有的。它将在重新安装软件时发生变化,并且不依赖于谁正在安装它。在过去,一些供应商使用了硬件哈希,但它也可以是随机生成的代码,存储在每个实例化时进行检索。从存储中删除代码与卸载软件基本相同。
  • [UI]用户ID:已注册的唯一标识符;您可以将其称为解锁代码或客户端或公司代码或序列号。它将唯一标识购买此特定安装的人员。
  • [HASH]哈希:计算值;最后一段认证是告诉软件它是合法注册的并且很好用。它应该可以从其他两个部分派生出来并存储在某个地方,无论是在文件系统中还是在Windows注册表中或其他地方。

逻辑流程

在伪代码中,软件运行以下过程:

begin:
  load IC
  if not IC: IC = generateIC
  load UI
  if not UI: UI = promptUser
testHash:
  load HASH
  if HASH=hash(IC,UI): goto valid
  HASH = activateLicense()
  if not HASH=hash(IC,UI): goto invalid    
valid:
  REV = revokeLicense()
  if REV: goto invalid
  done : run software
invalid:
  done : do not run software

generateIC:
  IC = some unique identifier
  store IC
  return IC
promptUser:
  UI = get id from user input
  store UI
  return UI
activateLicense:
  HASH = wwwResponse('activationRequest')
  store HASH
  return HASH
revokeLicense:
  REV = wwwResponse('checkIfRevoked')
  if REV: erase HASH
  return REV

伪代码还涉及可选的第四个元素:

  • [REV]撤销许可证的指示:公司软件公司可以跟踪软件激活的数量并撤消对滥用用户的访问。这不需要存储,只有在与www有可用连接时才可以检索。

无法连接到网站只会意味着许可证的状态不会改变。如果软件无法直接连接到网站,则可以从网络启用点获得更改程序,用户将其IC和UI输入浏览器,浏览器通过电子邮件向他们发送HASH,他们可以手动输入软件。这只是稍微涉及一些,但仍然允许用户自己这样做,其中一个重要因素是,如果他们希望接收将通过电子邮件发送给他们的哈希码,他们必须输入有效的电子邮件。

它不是防黑客或不可摧毁的,但它确实以合理的方式保护双方,不会导致挫败感。所涉及的实际机制应该严密保护公司机密。

注意:

在这个方案中,IC是计算机硬件上的散列还是只是一些随机生成的密钥并不重要。当它发生变化时所发生的一切都是软件将重新注册,如果它所在的机器连接到互联网可能不是问题,或者如果再次需要用户交互可能会有轻微的不便,但是如上所述,此部分仍可作为网站上的自助服务功能实施。如果他们想要计算激活次数或跟踪其他信息,则由软件公司负责。