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

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

2018-2-9 15:44
7917

翻译:无名侠

原文地址: https://yurichev.com/blog/XOR_Z3/
博客地址:http://www.cnblogs.com/pandaos/p/8435750.html

如果我们有一段用简单XOR加密过的文本,怎么寻找密钥呢?密钥的长度可能很长,所以暴力破解不是明智的选择。

明文、密文、密钥三者的关系可以用一些简单的方程组来描述,明文可能含有尽可能多的小写字母(a....z)。

( https://github.com/DennisYurichev/yurichev.com/blob/master/blog/XOR_Z3/1.py )

这里有一段需要被加密过的文件(350 字节):https://github.com/DennisYurichev/yurichev.com/blob/master/blog/XOR_Z3/cipher1.txt

运行尝试。

这段文本并不能流畅地阅读,有趣的是,只存在17字节的key。

我们对英语文本了解多少? 数字在文本中很稀少,有一种叫做“二合字母”的东西,比如:“th”、“he”、“in”、“er” 等等,我们可以通过计算它们在文本中出现的频率,然后寻找出现次数最多的那一组解。

( https://github.com/DennisYurichev/yurichev.com/blob/master/blog/XOR_Z3/2.py )

现在我们再从次执行脚本,好像更接近原文了

有几个字符还是有错误的,但是我们可以手动修复它们,因此添加限制条件。(不直接改原文的原因是我们的目标是寻找key,所以通过增加确定性限制条件重新求解key)

( https://github.com/DennisYurichev/yurichev.com/blob/master/blog/XOR_Z3/3.py )

这一次key正确了:

因此,这就是正确的key。

不用说,输入的数据越大越好。这个350字节的文件实际上是另一个更大加密文件的前戏(cipher2.txt, 12903 bytes) ,这个大文件的key可以不用添加那些些启发式条件也能求得。

SMT Solver 可以秒杀这些东西,我曾经很天真的解决了这些问题,这里有一个更快的版本: https://yurichev.com/blog/XOR_mask_2/尽管如此,这仍然是另一个优化问题的演示。


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

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