码迷,mamicode.com
首页 > 其他好文 > 详细

doc1997文档加密分析

时间:2019-05-18 23:50:24      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:ora   文字   拷贝   并且   md5算法   mat   office   nts   amt   

文档可被解压,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文档加密分析

标签:ora   文字   拷贝   并且   md5算法   mat   office   nts   amt   

原文地址:https://www.cnblogs.com/sherlock-merlin/p/10882258.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!