破解OFFICE文档(word和excel)的两种方法有:
1、使用黑客字典或暴力穷举方式来猜测用户的口令字;
2、采用全查表方式直接获取加密OFFICE文档的密钥,然后通过密钥去解密文档;方法2与方法1的区别是只能获取到文档内容,而不能获取到文档的加密密码。
这两种方法都需要知道office系统软件的加密机制,有兴趣的朋友可以去参考这篇文章:http://www.team509.com/download/MS_Word_encrypt.pdf。并且此文章对于方法1已经描述得很清楚了,在这里就不重复了。下面就重点讨论方法2:
大家可以去看另外一个牛人写的帖子:
【原创】Word Password Recovery Master 2.0.0.4 程序分析
http://bbs.pediy.com/showthread.php?p=369640&highlight=word#post369640
对此有一个大概的了解之后,继续下面的细节方面的讨论。
方法2简单的说就是让客户端提取OFFICE文档中的密钥流,发送给服务器,利用服务器的计算资源快速求解出解密密钥,再将密钥传回客户端,在本地解密OFFICE文件,从而得到文件内容。
而密钥流是通过RC4算法加密过的密钥。1个40bit密钥,根据RC4算法,就可以产生出相应的密钥流(乱数),如果能做到这样,那么就可以事先建立起2^40个对应关系,记为T 表;有了这个密钥流,再根据T 表反向查表,即可快速得到40比特密钥(输入),有了密钥即可对密报进行立即解密。
所以问题的关键就在两个:
1、获取到这个密钥流。根据 乱数 = 密文 xor 底码 的数学公式,如果底码为0,那么乱数就=密文。所以我们只要找出OFFICE文档中一段固定的5字节或全0处就行了。
2、建立全查表。这样就定义出了一个函数关系f,即 5字节key(输入)A 映射到 5字节ks(输出)B。这个全查表有2^40条记录。
关于全查表,目前还存在一些细节方面的问题,有请jeffcjh和各位感兴趣的朋友来帮忙解答,谢谢:
1、在没有压缩和其它任何优化处理的情况下,产生的全查表大概占多大的磁盘空间呢?
2、因为我还没有生成这个全查表,所以不清楚B5字节key(输入)A 映射到 5字节ks(输出)B的关系,按照您说的意思,5字节ks(输出)B存在大量的碰撞,也就是说,同一个5字节ks(输出)B,会有2^24个key(输入)A 值的对应?在2^16个文件中,每个文件中的只需要存放A值就够了,因为这些A值所对应的B值都是一样的?如果这样的话,不会存在根据客户端传回的B值而查询不到A值的情况吧。
3、这样说的话,前期的主要准备工作就不是对B值进行排序,而是把相同的B值划分到同一个文件中了(有什么效率比较高的方法吗)?那么查询速度的瓶颈就在于查询这个有2^24个A的文件上了?
注:由于此贴是从【求助】关于微软公布的office二进制文档格式 http://bbs.pediy.com/showthread.php?t=72128 转过来的,可能有些描述不是很清楚。有不明白的地方可以先去那个帖子看一下。
- 标 题:对office加密文档的快速破译问题的研究
- 作 者:xiaoxinxx
- 时 间:2008-11-01 17:27
- 链 接:http://bbs.pediy.com/showthread.php?t=75828