首页
社区
课程
招聘
[翻译]使用Z3破解简单的XOR加密
发表于: 2018-2-9 15:44 8180

[翻译]使用Z3破解简单的XOR加密

2018-2-9 15:44
8180

翻译:无名侠

原文地址: 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直播授课

收藏
免费 1
支持
分享
最新回复 (2)
雪    币: 0
活跃值: (478)
能力值: ( LV8,RANK:125 )
在线值:
发帖
回帖
粉丝
2
py带一个xortool的库  很好用
2018-4-3 13:44
0
雪    币: 7120
活跃值: (9944)
能力值: ( LV17,RANK:797 )
在线值:
发帖
回帖
粉丝
3
zjgcjy py带一个xortool的库 很好用
谢谢~
2018-4-3 19:48
0
游客
登录 | 注册 方可回帖
返回