暴力加密文件(异或加密)

brute force encrypted file (XOR encryption)

我有一个使用 XOR 算法加密的文件(如果重要,则为 GIF 类型)。 我唯一拥有的是加密文本,因此没有密钥或纯文本。现在我想知道如何暴力破解这个文件来获取(对称)密钥以最终解密它。 如果我没记错的话,它应该是一个 10 字节的密钥。我研究过使用 john the ripper,但我几乎只看到它被用于暴力破解帐户。 此外,如果相关,我没有可能包含密钥的文件,因此它必须自行生成可能的密钥。

更新:

现在我找到了一种生成所有可能的十六进制密钥的方法,现在我将不得不使用异或算法再次加密文件以解密它(如果这有意义的话)。现在执行此操作不会成为问题,但我如何检查加密是否在具有正确密钥时解密是否有效,所以基本上它不再尝试任何进一步的尝试?

您(和@gusto2)在使用幻数方面完全正确:您知道前 6 个字节是 GIF89a,从而立即获得密钥的前 6 个字节。

跟随gif specification,我们可以了解到更多的关键。这里有一些提示,我从索引 0 开始对文件的字节进行编号(因此字节 0-5 对应于幻数):

  • 明文gif文件的最后一个字节是0x3B。这可能会给您多一个密钥字节(取决于文件大小,例如,如果文件大小等于 7、8 或 9 模 10,那么您将获得密钥字节)

  • 幻数之后是一个7字节的逻辑屏幕描述符。前 4 个字节告诉宽度和高度:如果你知道你的 gif 的宽度和高度,那么你就能够导出密钥的其余 4 个未知字节。假设您不知道。

  • 您将知道文件的第 10 个字节,因为它对应于 XOR 加密中的关键字节 0。当您解密该字节时,最高有效位是全局颜色 Table 标志。如果该位为 0,则没有全局颜色 Table——这意味着下一个字节(字节 11)要么是图像(字节为 0x2C)块,要么是扩展(0x21)块。同样,你可以解密这个字节(因为它对应于密钥字节 1)所以你确切地知道它是什么。

  • 图像以从 0x2C 开始到 00 结束的图像块出现。

有两种方法可以解密:

(1) 手工工作,正如我在上面描述的那样。您应该能够解释这些块,并查找预期的关键字节值 0x2c、0x21、0x00 和 0x3b。从那里你可以弄清楚下一步是什么,并手工导出关键字节;或者

(2) 你暴力破解了最后 4 个字节(2^32 个可能的值)。对于每个猜测,您解密候选 gif 图像,然后将结果输入 gif 解析器 (example parser ) 以查看它是否 barfs。如果它吐了,那么你就知道那个候选人错了。如果没有,那么您可能有一个真正的解密并保存它。最后,你一个一个地浏览你真正的候选人(你不期望很多候选人),看看哪个是正确的解密。

编辑: 你说宽度和高度是 640 和 960。这意味着字节 6 和 7 将是 640 的小端表示,然后是 960 的小端表示对于字节 8 和 9。您应该从中获得整个密钥。尝试一下,让我们知道它是否有效。确保您的字节顺序正确!