3

典型的产品激活方案如下

  1. 唯一的序列号。分配给用户
  2. 为用户的机器生成一个唯一的硬件 ID。

在将此信息提供给供应商后,供应商会发出激活码。

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

谢谢

4

3 回答 3

5

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

“奔腾 4 双核 3.8 GHz,HDD1:320GB”
等等 几乎每一种语言都有很多免费的 MD5 散列实现,你可以用谷歌搜索它。

你没有说你的目标是什么平台,但如果你使用的是 Windows,你可以通过查询 WMI 或使用 Windows API 调用来获取 PC 的硬件配置。例如,在 WMI 中查看的物理内存类是Win32_PhysicalMemory

当软件第一次安装时,这个散列被编译,然后被发送到激活服务器,激活服务器发回一些只匹配那个散列的相应代码。一个非常简单/无用的示例 - 假设硬件哈希为 123,检查算法是添加硬件哈希和激活码后所有数字都应为 9,激活服务器将返回 876。程序将添加 2代码一起得到999,然后解锁使用。

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

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

  • 每当用户升级他们的硬件、重新安装他们的 PC 等时,您可能会产生帮助他们重新激活软件的支持费用,并给用户带来不便。
  • 如果您停止激活服务器、产品或关闭您的公司,您实际上关闭了付费使用该产品的人的访问权限。
  • 这几乎是将用户的 PC 变成了硬件加密狗——表面上听起来是个好主意,但会阻止用户购买软件

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

底线是 - 如果您的软件对许多人来说真的很有价值,那么无论它多么复杂,都会有人绕过您的复制保护方案。使用基于硬件配置的产品激活只会让你真正想与之做生意的那群人——那些基本上是诚实的并想合法使用你的产品的人——变得更糟。那些不提供有关合法软件的东西的人将使用您的激活方案已破解的版本。

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

只是我的2c。

于 2009-12-09T07:32:41.827 回答
1

就像 Michael (Todd) 评论的那样,方法或方案因供应商而异。如果它真的很标准,那么“破解”可能更容易,是吗?

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

以下是一些相关的 SO 帖子:
您如何保护您的软件免受非法分发?
阻止软件盗版的方法?

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

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

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

于 2009-12-09T06:24:36.320 回答
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 是计算机硬件上的散列还是只是一些随机生成的密钥并不重要。当它发生变化时会发生的只是软件将重新注册自己,如果它所在的机器连接到互联网,这可能不是问题,或者如果再次需要用户交互可能会带来一点不便,但是如上所述,这部分仍然可以作为网站上的自助服务功能来实现。如果他们想要计算激活次数或跟踪其他信息,这取决于软件公司。

于 2014-04-11T17:18:18.660 回答