软件密钥生成器如何工作?

信息安全 加密 drm
2021-08-10 12:17:31

我见过他们很多次,有很多不同类型的软件,但我一直想知道的一件事是,软件密钥生成器如何知道要生成什么密钥。我知道它的基本原理:keygen 在软件安装文件的某处查找并创建一个与某些允许程序工作的加密文件匹配的密钥。但我想知道他们是如何做到的,以及如何预防。这确实是一个多部分的问题。

  1. 密钥系统如何工作?
    • 程序员通常如何创建基于密钥工作的软件。我是一名中级程序员,但我从未了解过它的安全/反盗版方面。他们如何创建和/或识别允许软件开始工作的密钥?
  2. 它通常会在哪里找到这个“加密文件”?

    • 它是在计算机上的物理文件中,还是在它调用的站点外数据库中?
  3. 公司如何加密该文件?

    • 我可以想象密钥必须以不仅仅是纯文本的形式存储,他们如何保持加密?
  4. keygen 使用什么方法来创建密钥?
    • 我玩过一些密码破解软件,例如“cain &able”,我注意到,使用一些密码破解方法,例如暴力破解和字典,它给了我多年的 ETA,但是keygens 似乎可以立即创建密钥。他们是否完全使用不同的方法?
  5. 公司可以采取哪些措施来防止在盗版软件中使用注册机?
    • 我开始编写自己的要分发的软件,我想知道我可以使用哪些现有的、相对简单的方法来防止
4个回答

密钥系统如何工作?

好吧,这取决于有很多实现。其中之一在stackoverflow中进行了讨论:

假设您不想为每个用户进行特殊构建,那么:

  • 为自己生成产品的密钥
  • 取用户名
  • 使用(例如)SHA1 连接用户名和密钥和散列
  • 将 SHA1 哈希解压缩为字母数字字符串。这是个人用户的“产品密钥”
  • 在程序中,执行相同的哈希,并与产品密钥进行比较。如果相等,OK。

注意:每个密钥方案都可以破解。这就是为什么很多工具都使用在线验证的原因。

它通常会在哪里找到这个“加密文件”?

使用前一种方法时通常没有加密文件。可能还有其他方法可以使用另一种算法生成密钥,但它们永远不会将所有密钥存储在程序中。

公司如何加密该文件?

好吧,如果您指的是存储用户在系统中键入的密钥,那么有时它会以明文形式保存在配置文件中。有时他们使用带有硬编码密钥的对称(如 AES)加密来加密此文件。

keygen 使用什么方法来创建密钥?

因为有些人可以弄清楚程序使用的方案,并在他们自己的 keygen 中实现它。

公司可以采取哪些措施来防止在盗版软件中使用注册机?

在线激活,但您越难让客户使用该软件,您购买它的可能性就越小。最终,没有一款软件是防盗版的如果有的话,像 Adob​​e 和微软这样的公司会立即雇佣你。

计算机软件的序列号具有特定模式,允许安装程序或应用程序检测它是否是合法密钥。一个非常简单的例子是,每个序列号都恰好出现三个数字 5,因此 1932-1253-2319-5512 将是一个有效的序列号。在现实生活中,数字之间的关系当然会更复杂。

随附的软件包含检查序列是否有效的算法。软件创建者有一个软件允许他为产品创建序列号。

为了创建一个注册机,一个破解者小组(专门从事破坏复制保护计划的人)分析程序可执行文件以找到检查序列的部分。然后,他们重建算法以根据检查代码创建连续剧。完成的 keygen 是一个应用该算法创建序列号的应用程序。

有时,keygen 并不真正包含算法,而是包含有效序列号的列表,其中一个是随机选择的。

后来的服务包中用于 Windows xp 的密钥生成器更加复杂,因为微软不仅检查密钥是否有效,而且检查它是否已与副本一起出售并且尚未在另一台计算机上使用。密钥生成器向 Microsoft 服务器发送大量请求以检查它是否是工作密钥。

密钥系统如何工作?

以最常见的形式if (some-complex-or-not conditions-here) then (OK)检查条件的复杂性仅受您的幻想限制

它通常会在哪里找到这个“加密文件”?

没有任何常见的模式,在哪里以及如何存储和读取这些信息。它可以是文件而不是文件(注册表项,例如,在 Windows 的情况下)

公司如何加密该文件?

通常实用 - 永远不要存储为纯文本,在存储之前使用不可逆的转换方法,但是 - 通过密钥激活,即使是纯文本密钥存储也可能是防弹的:被盗密钥一旦激活,将无法从第二次注册开始工作(可滥用和可破解的方法,但可能在某种程度上有效)

keygen 使用什么方法来创建密钥?

检查有效性的逆向工程方法有助于创建关键数据的逆向工程算法

公司可以采取哪些措施来防止在盗版软件中使用注册机?

非技术性 - 产品的合理价格。在这种情况下,keygens 无论如何都会(可能)出现,但对于破解团队来说,这将是更多“只是为了好玩”的游戏,而不是大众消费产品所要求的(并在直接影响下使用) 。

技术上 - 防止在调试器下运行,结合文件中的加密代码(内存中解密,可能 - 一些敏感部分的多层),内存操作链,外部存储中密钥的在线验证(参见以前的方法,也适用于检查器)...

首先,我建议您停止查看这些 keygen 文件,因为它们是被黑客入侵的软件(大部分/有时)伴随着一些其他无害的图像/nfo/lnk 文件,这些文件完全可以被黑客/饼干的意图可以专门用于感染您的机器本身。

当资源管理器尝试访问它时,您可能已经听说过 img/lnk/other 文件感染了盒子。然后是密钥生成器本身就是二进制文件,它们应该在你的盒子上执行和执行任何东西,对吧。

现在,对于您的查询...

你必须明白,没有全局特定的文件/内存位置/等东西可以去。

为软件设计注册机有两种主要的基本方法:

  • 使用一些高级进程调试器 () 来调试原始软件的许可操作,以查找应用程序交互的内存位置以存储/匹配密钥。然后尝试解决它。需要掌握良好的汇编语言技能才能在这些方面表现出色。
  • 对应用程序本身进行逆向工程以找出所涉及的方法,然后采取相应的行动。