【问题标题】:How do 25-character product keys work?25 个字符的产品密钥如何工作?
【发布时间】:2010-12-01 05:58:17
【问题描述】:

Microsoft 产品和其他产品的产品密钥通常为 5 组,每组 5 个字符,如下所示:

ABCDE-12345-ABCDE-12345-VWXYZ

产品如何知道密钥是否有效?某种密码学?如果我想在我的代码中使用这种产品密钥,是否有库?

【问题讨论】:

  • MS 可能永远不会透露他们的算法。
  • 就像 27 个字符的产品密钥一样,只是更快。只要没有人提出 23 个字符的产品密钥,我们应该没问题 :-) {向 Farrelly 兄弟道歉}。
  • 我想知道 - 为什么是 25?并计算出 25 是编码 128 位数据所需的最少符号数量。而且 25 是 5 的倍数,它允许偶数分组。这些键在数据容量和人类可读性方面都经过精心设计!
  • @ogurets - 只有 114 位 - 因为每个字符都是 24 个字符之一,而不是您假设的 36 个字符:p
  • @JaromandaX,26 个字母 + 10 个数字。我看不出我错过了什么。

标签: windows registration


【解决方案1】:

您可能想查看this article,了解如何实现序列号验证功能。它还涉及一些高级技术,例如如何掌握密钥生成器、泄露的密钥等。

简而言之,这样的键中通常包含三个底层字段:

  • 实际序列号,文章称其为“种子”
  • 一些验证数据;代码实际上只检查了部分验证数据
  • 校验和、CRC 或其他简单的防错字机制

通过仅在您的代码中实现部分验证数据检查,您可以执行诸如“真正的验证”(在这种情况下,其余验证发生在您的服务器上)之类的事情,或者通过检查验证的不同子集来触发注册机新版本中的数据。

【讨论】:

    【解决方案2】:

    特别是对于 Microsoft 产品,是否有一些可用的知识。

    Windows XP 上的产品密钥使用自定义字母表进行 base24 编码。它由一个序列号(来源称其为“原始产品密钥”)和一个数字签名组成。 source

    Windows 8 及更高版本的产品密钥在软件专利申请WO 2012067888 A1 中有一些文档。它仍然是 base24 编码的(第 57 章等,这实际上意味着“N”的位置被用作要解码的第一个字符)。它的要点是 Windows 8 及更高版本的产品密钥包含以下部分:

    • Group ID,表示类型/版本/系列/发行渠道,参见第 34 条)
    • 序列号(形成“原始产品密钥”和组 ID)
    • 安全值 1 和 2(不同级别的安全性,两者都可能是签名,参见法案 34 et seqq., 46, 55)
    • 校验和(第 56 步,实际上是密钥上截断的 POSIX 校验和)
    • 升级位

    【讨论】:

      【解决方案3】:

      有四种方法可以确认密钥。

      1. 与 exe 中的现有字符串进行简单比较(极易破解)
      2. 算法与输入的字符串进行比较(几乎和 #1 一样简单。完全取决于破解者的逆向工程技能)。
      3. 与 Internet 上的服务器进行比较。 (可以绕过)
      4. 硬件加密狗。

      根据您从 microsoft 获得的产品,他们使用上述前 3 种机制之一。例如,他们的操作系统通常是电话回家;但是他们的开发工具要么有密钥,要么进行算法比较。他们的一些旧操作系统曾经使用过该算法。

      有一个修改后的选项 3,但这只是让应用程序经常回家,通常基于某些事件。对于操作系统,MS 会验证输入的产品密钥以用于某些 Windows 更新和其他产品下载。此外,根据许可证密钥本身,它可能会一个月左右打电话回家一次。顺便说一句,中国拥有 IE6 的第一安装基地是有原因的。

      第四个选项也可以被规避。通常破解者只会修补您的产品以绕过执行硬件检查的代码部分。

      【讨论】:

      • 在 exe 中存储密钥散列而不是密钥是否更安全?
      • @ArsenMkrt:重点是,你可以让它变得困难,但并非不可能。你应该让它变得足够困难,让普通人会继续为你试图保护的一切付出代价。无论如何,骗子都会成为骗子。
      • 而选项 3 可以被任何可以拆卸修改自己的网络路由器或 DNS 服务器的人绕过。设置一个伪造的身份验证服务器并将流量定向到它是微不足道的。如果程序使用 SSL 证书或类似的东西验证服务器的真实性,则可以使用像十六进制编辑器这样简单的东西用攻击者的伪造证书覆盖该证书。简而言之:如果它运行在别人的计算机上,你最终没有办法 100% 保护它。
      • @Pacerier 怎么样?请记住,在来自服务器的实际响应(不仅仅是作为传输层)中使用加密技术仍然可以通过修补本地二进制文件来跳过这样的检查。 (无论如何,假设没有 TPM。)
      • @Pacerier Easy 是一个相对术语,也非常依赖于攻击者的专业程度。最终,难易程度完全无关紧要——有人或某个小组会弄清楚,然后将结果发布在互联网上(咳咳)更糟糕的部分。我可以证明这点吗?不。你能告诉我一个反例像这样的保护没有被破坏吗? (我需要引用 HD-DVD/AACS 之类的东西吗?)
      猜你喜欢
      • 2017-09-12
      • 1970-01-01
      • 2012-07-24
      • 1970-01-01
      • 1970-01-01
      • 2010-10-13
      • 2011-05-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多