翻译:无名侠
原文地址: 2caK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6&6N6i4u0A6j5$3S2W2N6W2)9J5k6h3y4G2L8g2)9J5c8X3u0D9L8$3N6Q4x3V1k6j5e0#2u0Q4y4h3k6K9x3#2)9J5c8R3`.`.博客地址:d1fK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3y4F1j5X3I4G2k6%4y4Q4x3X3g2U0L8$3#2Q4x3V1k6H3j5h3&6V1j5h3!0K6i4K6u0r3M7q4)9J5c8U0R3@1x3K6f1%4y4e0m8Q4x3X3g2Z5N6r3#2D9
如果我们有一段用简单XOR加密过的文本,怎么寻找密钥呢?密钥的长度可能很长,所以暴力破解不是明智的选择。
明文、密文、密钥三者的关系可以用一些简单的方程组来描述,明文可能含有尽可能多的小写字母(a....z)。
( f08K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6p5k6h3&6F1K9i4y4k6N6i4u0A6j5$3S2W2N6W2)9J5c8Y4W2#2M7X3W2U0K9r3g2$3i4K6u0W2j5$3!0E0i4K6u0r3j5X3I4G2j5W2)9J5c8X3#2S2M7%4c8W2M7W2)9J5c8X3u0D9L8$3N6Q4x3V1k6j5e0#2u0Q4y4h3k6K9x3#2)9J5c8U0q4Q4x3X3g2H3P5b7`.`. )
这里有一段需要被加密过的文件(350 字节):907K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6p5k6h3&6F1K9i4y4k6N6i4u0A6j5$3S2W2N6W2)9J5c8Y4W2#2M7X3W2U0K9r3g2$3i4K6u0W2j5$3!0E0i4K6u0r3j5X3I4G2j5W2)9J5c8X3#2S2M7%4c8W2M7W2)9J5c8X3u0D9L8$3N6Q4x3V1k6j5e0#2u0Q4y4h3k6K9x3#2)9J5c8X3y4A6M7r3S2W2M7U0q4Q4x3X3g2@1P5s2b7`.
运行尝试。
这段文本并不能流畅地阅读,有趣的是,只存在17字节的key。
我们对英语文本了解多少? 数字在文本中很稀少,有一种叫做“二合字母”的东西,比如:“th”、“he”、“in”、“er” 等等,我们可以通过计算它们在文本中出现的频率,然后寻找出现次数最多的那一组解。
( c98K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6p5k6h3&6F1K9i4y4k6N6i4u0A6j5$3S2W2N6W2)9J5c8Y4W2#2M7X3W2U0K9r3g2$3i4K6u0W2j5$3!0E0i4K6u0r3j5X3I4G2j5W2)9J5c8X3#2S2M7%4c8W2M7W2)9J5c8X3u0D9L8$3N6Q4x3V1k6j5e0#2u0Q4y4h3k6K9x3#2)9J5c8U0u0Q4x3X3g2H3P5b7`.`. )
现在我们再从次执行脚本,好像更接近原文了
有几个字符还是有错误的,但是我们可以手动修复它们,因此添加限制条件。(不直接改原文的原因是我们的目标是寻找key,所以通过增加确定性限制条件重新求解key)
( 3d6K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6p5k6h3&6F1K9i4y4k6N6i4u0A6j5$3S2W2N6W2)9J5c8Y4W2#2M7X3W2U0K9r3g2$3i4K6u0W2j5$3!0E0i4K6u0r3j5X3I4G2j5W2)9J5c8X3#2S2M7%4c8W2M7W2)9J5c8X3u0D9L8$3N6Q4x3V1k6j5e0#2u0Q4y4h3k6K9x3#2)9J5c8U0y4Q4x3X3g2H3P5b7`.`. )
这一次key正确了:
因此,这就是正确的key。
不用说,输入的数据越大越好。这个350字节的文件实际上是另一个更大加密文件的前戏(cipher2.txt, 12903 bytes) ,这个大文件的key可以不用添加那些些启发式条件也能求得。
SMT Solver 可以秒杀这些东西,我曾经很天真的解决了这些问题,这里有一个更快的版本: a80K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6&6N6i4u0A6j5$3S2W2N6W2)9J5k6h3y4G2L8g2)9J5c8X3u0D9L8$3N6Q4x3V1k6j5e0#2u0Q4y4h3k6E0j5i4y4C8i4K6g2X3x3W2)9J5c8R3`.`.尽管如此,这仍然是另一个优化问题的演示。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
zjgcjy py带一个xortool的库 很好用