串行发生器/裂纹是如何产生的?

时间:2020-03-06 14:41:25  来源:igfitidea点击:

我的意思是,我一直想知道有人会如何开发出打破/欺骗许多共享软件程序中合法使用限制的算法。

只是出于好奇。

解决方案

坏人使用反汇编程序搜索密钥检查代码。如果我们知道该怎么做,这是相对容易的。

之后,我们将密钥检查代码翻译为C或者其他语言(此步骤是可选的)。逆向进行密钥检查的过程将为我们提供一个密钥生成器。

如果我们知道汇编程序,则大约需要一个周末来学习如何执行此操作。我几年前就做到了(尽管从未发布过任何东西。这只是我的游戏开发工作的研究。要编写难以破解的密钥,我们必须了解人们如何破解)。

首先,大多数复制保护方案都不是非常先进,这就是为什么我们现在看不到很多人都在推销自己的原因。

有几种方法可以做到这一点。我们可以在调试器中逐步执行代码,这通常需要对汇编有相当的了解。使用它,我们可以了解程序中复制保护/密钥生成方法在何处被调用。这样,我们可以使用IDA Pro之类的反汇编程序来更仔细地分析代码,并尝试了解正在发生的事情以及如何绕过它。我通过在日期检查中插入NOOP指令来破解限时Beta版。

实际上,这取决于对软件的良好理解和对汇编的基本理解。 Hak5在本赛季的前两集中做了两部分的系列节目,内容涉及逆向工程和破解的基本知识。这确实很基础,但可能正是我们要寻找的东西。

我认为每个裂缝都不尽相同,但我想大多数情况下都会有人花钱
在调试器中花费大量时间来跟踪有问题的应用程序。

串行生成器通过分析以下算法进一步将这一步骤
检查序列号的有效性并进行反向工程。

可能的破解者将反汇编程序,并寻找"复制保护"位,特别是确定序列号是否有效的算法。从该代码中,我们通常可以看到解锁功能所需的位模式,然后编写生成器以使用这些模式创建数字。

另一种选择是寻找在序列号有效时返回" true"而在序列号无效时返回" false"的函数,然后开发一个二进制补丁程序,以便该函数始终返回" true"。

其他所有内容基本上都是这两个想法的变体。从某种意义上说,复制保护始终是可破坏的,在某些时候我们必须以可执行代码结尾,否则处理器将无法运行它。

我们只需提取算法的序列号,然后开始对它进行"猜测",并寻找积极的回应。计算机功能强大,通常只需要一小会儿就可以吐出热门歌曲。

至于黑客攻击,我曾经能够在较高层次上逐步执行程序,并寻找停止工作的地方。然后,我们返回到成功的最后一个"呼叫"并进入该步骤,然后重复。那时,复制保护通常是写到磁盘上,然后查看随后的读取是否成功(如果这样,则复制保护失败了,因为它们以前用激光刻录了部分软盘,因此无法写入)。

然后,只需找到正确的调用并对该调用进行硬编码正确的返回值即可。

我敢肯定它仍然很相似,但是他们花费了大量的精力来隐藏通话的位置。我最后一次尝试放弃是因为它一直将代码加载到单步执行的代码上,而且我确信自那以后它变得越来越复杂。

除了违法之外,这是一项非常复杂的任务。

仅从理论上讲,通常的方法是分解程序以进行破解,并尝试找到检查密钥或者序列码的位置。

说起来容易做起来难,因为任何认真的保护方案都将检查多个位置的值,还将从串行密钥中获取关键信息以供以后使用,这样当我们认为自己猜对了时,程序将崩溃。

要创建裂缝,我们必须确定要进行检查的所有点,并适当地修改汇编代码(通常将有条件的跳转反转或者将助剂存储在存储位置中)。

要创建密钥生成器,我们必须了解算法并编写程序以重新进行完全相同的计算(我记得MS Office的旧版本的序列规则非常简单,数字的总和应为的倍数。 7,因此编写keygen相当琐碎)。

两项活动都需要我们将应用程序的执行跟踪到调试器中,并尝试弄清正在发生的事情。并且我们需要了解操作系统的低级API。

一些受严格保护的应用程序已对代码进行加密,以使文件无法反汇编。加载到内存后会对其解密,但是如果他们检测到内存中的调试器已启动,则他们拒绝启动它,

从本质上讲,这是需要非常深入的知识,独创性和大量时间的事情!哦,我是否提到在大多数国家/地区都是非法的?

如果我们想了解更多信息,请参阅Google的+ ORC破解教程,这些教程非常古老,如今可能已无用,但我们可以对它的含义有个很好的了解。

无论如何,要了解所有这一切的一个很好的理由是,如果我们想编写自己的保护方案。

Nils的帖子处理密钥生成器。对于裂缝,通常会找到一个分支点并反转(或者消除条件)逻辑。例如,我们将进行测试以查看该软件是否已注册,并且如果已注册,则测试可能会返回零,然后相应地跳转。我们可以通过修改单个字节将"如果等于零(je),则跳转"更改为"如果等于零(jne),则跳转"。或者,我们可以在代码的各个部分上编写不需要执行操作的空操作。

可以对已编译的程序进行反汇编,并且有足够的时间确定的人可以开发二进制补丁。破解只是一个二进制补丁,可以使程序的行为有所不同。

我不知道为什么他们不只是分发个性化的二进制文件,而所有者的名称存储在二进制文件中的某个位置(加密和混淆),或者更好地分布在整个二进制文件中。存储,但是从文件中删除名称太容易了。