doc1997文档加密分析
Posted sherlock-merlin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了doc1997文档加密分析相关的知识,希望对你有一定的参考价值。
文档可被解压,7z x -y -otest test.doc
解压后得到5个文件
文件名 | 文件内容 |
1Table | 一些数据表 |
CompObj | 通用的对象 |
WordDocument | 实际的文字和格式化信息就存放在这里 |
SummaryInforamtion | 摘要信息 |
DocumentSummaryInformation | 其他的摘要信息 |
Office文档RC4加密有以下步骤:
使H()实现了MD5算法,Hn表示经过第n次MD5运算后的哈希值,加号(+)表示它们之间的联系。密码需要转换成为unicode数组。
密码长度的限制和密码的字符是由客户端限制的。具体细节,请查看MS-DOC和MS-XLS。除非指定了,密码的最大长度是255个unicode字符。
初始化密码哈希是由以下操作完成
H0 = H(password)
salt(盐)是随机生成的并且等于16字节。它被用来和password一起计算得到一个哈希值:
1、TruncatedHash = H0[0:40] 截取H0的头5个字节
2、IntermediateBuffer = byte[336];
3、buf = TruncatedHash + salt; 组成一个21字节的buf,拷贝buf到TruncatedHash里16次, (21*16=336)
for(i=0; i< 336; i++){
IntermediateBuffer[i] = buf[i%16]
}
4、H1 = H(IntermediateBuffer)
最终的哈希值获得后,密钥由它的前5个字节+32位的block,block全为0x00。产生40位RC4密钥的步骤如下:
TruncatedHash = H1[0:40]
Hfinal = H(TruncatedHash + block).
key = Hfinal[0:40]
获得密钥k后,用该key将新鲜数通过RC4加密后存储。
新鲜数扩充为64字节后,进行MD5计算,产生的哈希值用该key 通过RC4加密后存储。
验证用户密码的步骤,按照上面的方法得到key,用该key解密得到新鲜数和新鲜数hash x,再次运行求新鲜数hash的步骤得到y,对比x ,y两者是否相等。
以上是关于doc1997文档加密分析的主要内容,如果未能解决你的问题,请参考以下文章