首页
社区
课程
招聘
[讨论]对office加密文档的快速破译问题的研究
发表于: 2008-11-1 17:27 134049

[讨论]对office加密文档的快速破译问题的研究

2008-11-1 17:27
134049
收藏
免费 7
支持
分享
最新回复 (257)
雪    币: 215
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
151
记录头为0B 02 14 00的记录体解密还有个地方有问题:
这是解密正确的文档:
000039e5h: 0B 02 14 00 00 00 00 00 00 00 00 00 0E 00 00 00
000039f5h: 8D 38 00 00 81 3A 00 00   

这是我解密之后有区别的文档:
000039e5h: 0B 02 14 00 00 00 00 00 00 00 00 00 0E 00 00 00
000039f5h: C7 38 00 00 BB 3A 00 00        

这是加密之前的文档:
00003a1fh: 0B 02 14 00 FD A8 3C 1E 41 6F 0A E7 3D B5 CB 60
00003a2fh: F8 2A B2 04 DD AE CF 4B

总共有三次类似的地方,即6个字节有区别
2008-12-16 16:35
0
雪    币: 215
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
152
谢谢jeffcjh!!!
2008-12-16 16:36
0
雪    币: 58
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
153
是什么问题?
2008-12-16 19:04
0
雪    币: 58
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
154
说着说着就到第11页了。我原来停在第10页,看到你说还有最后一个问题。现在都解决了,看来你还是肯钻研的嘛。
2008-12-16 19:28
0
雪    币: 204
活跃值: (38)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
155
偶是来学习的~~顺便顶一下这篇好文章
2008-12-16 19:34
0
雪    币: 260
活跃值: (11)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
156
有价值,学习
2008-12-16 19:35
0
雪    币: 215
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
157
虽然解密文档可以正确打开了,但是分析两个文档,又发现一个问题。。。

记录头为0B 02 14 00的记录体解密还有个地方有问题:
这是解密正确的文档:
000039e5h: 0B 02 14 00 00 00 00 00 00 00 00 00 0E 00 00 00
000039f5h: 8D 38 00 00 81 3A 00 00   

这是我解密之后有区别的文档:
000039e5h: 0B 02 14 00 00 00 00 00 00 00 00 00 0E 00 00 00
000039f5h: C7 38 00 00 BB 3A 00 00        

这是加密之前的文档:
00003a1fh: 0B 02 14 00 FD A8 3C 1E 41 6F 0A E7 3D B5 CB 60
00003a2fh: F8 2A B2 04 DD AE CF 4B

总共有三次类似的地方,即6个字节有区别。
2008-12-16 19:45
0
雪    币: 58
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
158
这是加密之后的结果,你把加密之前的这个记录的具体数据贴出来看看。
2008-12-16 20:01
0
雪    币: 58
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
159
00003a1fh: 0B 02 14 00 FD A8 3C 1E 41 6F 0A E7 3D B5 CB 60
00003a2fh: F8 2A B2 04 DD AE CF 4B
是加密之后的结果,你把加密之前的这个记录的具体数据贴出来看看。
2008-12-16 20:02
0
雪    币: 215
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
160
哦,刚才写错了。这个才是加密之前的数据:
000039e5h: 0B 02 14 00 00 00 00 00 00 00 00 00 0E 00 00 00
000039f5h: 8D 38 00 00 81 3A 00 00

与您解密之后的数据是一样的。
2008-12-16 20:07
0
雪    币: 58
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
161
这个有点怪异了。你的解密结果应该没啥大问题了,仅在某几个字节上不一致,可能是某个什么细节上没注意到。但是,我建议你对这点小问题暂时放过去,抓紧时间继续做更重要的下一步工作。
2008-12-16 20:21
0
雪    币: 215
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
162
我现在也在同时做下一步的工作了。
2008-12-16 20:26
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
163
这个没研究,都是用工具。
2008-12-17 01:58
0
雪    币: 215
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
164
jeffcjh,还有两个问题请教您:
1、Excel的乱数(即所讨论的输出B)是从哪个位置找呢?
2、前面生成的全查表也应该适用于Excel的加密文档吧,我生成的全查表时所调用的函数4是这样的RC4(K, 16, ks, 5),其中block为1。
2008-12-17 20:42
0
雪    币: 58
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
165
你的这两个问题其实是一致的,看来你还并没有充分掌握全查表方法的本质精神。

要想Word和Excel使用同一个查表数据库,显然需要在Word密报中和Excel密报中的某些相同偏移位置存在固定底码(底码位置相同,但底码形式不需相同),这样一来,可以立即由密报xor底码得到乱数,从而实施全查表。

为表述准确,我用数学语言简要说明如下
定义两个偏移位置集合S1、S2:
S1 := {P | Word密报的偏移位置P的底码为某固定值};
S2 := {P | Excel密报的偏移位置P的底码为某固定值};

要想达到共享同一查表数据库的目标,只需两个集合之交集S1*S2不等于空集合即可。
一般来说,block只能为0,即均只能从文件偏移0x200的地方开始找固定底码位置。

我已将Word解密文件和Excel解密文件发给你,你自己去观察确定交集S1*S2的结果。
假设交集S1*S2中有5个位置,譬如P1, P2, P3, P4, P5(肯定存在的),5个位置不需要连续在一起,中间隔着也不影响。那么生产乱数时的函数调用必须为:
RC4(K, 16, ks, P1);
RC4(K, 16, ks, P2);
RC4(K, 16, ks, P3);
RC4(K, 16, ks, P4);
RC4(K, 16, ks, P5);
即要生产出这5位位置的乱数,作为B来保存(具体实施时自可简化)。
2008-12-18 10:47
0
雪    币: 215
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
166
。。。
这样的话我已经产生的全查表不能适用与EXCEL,还需要重新再次产生。。。
2008-12-18 10:54
0
雪    币: 215
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
167
假设交集S1*S2中有5个位置,譬如P1, P2, P3, P4, P5(肯定存在的),5个位置不需要连续在一起,中间隔着也不影响。那么生产乱数时的函数调用必须为:
RC4(K, 16, ks, P1);
RC4(K, 16, ks, P2);
RC4(K, 16, ks, P3);
RC4(K, 16, ks, P4);
RC4(K, 16, ks, P5);
即要生产出这5位位置的乱数,作为B来保存(具体实施时自可简化)。

我有点不明白,P1、P2、P3、P4、P5产生之后怎样保存为B?
假设P1=210,P2=220,P3=230,P4=240,P5=250,那么调用
RC4(K, 16, ks, P1);
RC4(K, 16, ks, P2);
RC4(K, 16, ks, P3);
RC4(K, 16, ks, P4);
RC4(K, 16, ks, P5);
后,B值是不是等于(ks[P1],Ks[P2],Ks[P3],Ks[P4],Ks[P5])?
2008-12-18 12:18
0
雪    币: 58
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
168
对,这5个位置的乱数保存为B
2008-12-18 20:32
0
雪    币: 215
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
169
我之前生成的全查表,好像只能解密WORD2003文档,我今天试验了一下WORD2000,从0X400处取出的B值不完全相符的,有区别,是不是需要判断WORD的版本,根据不同的版本到不同的地方取B值?还是之前生成的全查表只能解密W0RD2003的加密文档呢?
2008-12-19 13:13
0
雪    币: 58
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
170
可能是其他问题。从word97至word2003的加密机制都一样。
2008-12-19 20:21
0
雪    币: 215
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
171
哦。是不是说我生成的全查表是没问题的,只需要从获取B值的位置方面找原因吗?我再好好查一查。
2008-12-20 16:00
0
雪    币: 215
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
172
jeffcjh:这几天我测试了WORD2003和WORD2002,都可以使用我生成的全查表来解密,但是WORD2000就有点问题,按照全查表的生成方法产生的B值是BB   DB   BB   A7   40,而在0X400处找到的B值却是
00000400h: BB DB 69 A6 40 ,能否抽空帮我看看是什么原因?麻烦您了。
加密的文档已经发送您的邮箱里了。
2008-12-20 22:37
0
雪    币: 58
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
173
你并没有错,我将你发来的密文解密后发现文件偏移0x400处的5字节为
00 00 D2 01 00
正好与你的观察结果一致。

这说明了两点:
1、word2000的加密机制仍然与其它版本相同;
2、直接取文件偏移0x400处的5字节作为乱数来进行查表,在某些情况下不对。

所以你需要在文件偏移0x200至0x3ff之间找找固定底码的位置,按照前面所说的交集来确定同时适用于Word和Excel的情况,这是最佳解决方案。
2008-12-21 02:10
0
雪    币: 215
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
174
明白了。谢谢,继续研究中......如果有问题再请教您。
2008-12-21 11:23
0
雪    币: 215
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
175
定义两个偏移位置集合S1、S2:
S1 := {P | Word密报的偏移位置P的底码为某固定值};
S2 := {P | Excel密报的偏移位置P的底码为某固定值};

要想达到共享同一查表数据库的目标,只需两个集合之交集S1*S2不等于空集合即可。
一般来说,block只能为0,即均只能从文件偏移0x200的地方开始找固定底码位置。

有几个问题想确认一下:
1、S1与S2的交集是使用解密之后的文档来查找,而不是使用加密的文档来查找,是吗?
2、是不是从0x200-0x400的任何位置如果满足条件都可以作为S1与S2的交集?
3、这些交集,如果在加密后也为00,是不是就不能使用?
4、这些交集在加密后的文档中是不是不会再相同了?

我按照您说的方法,找了这几十个交集,我列出其中的12个,您看是否正确,如果行的话,我就取其中的5个来做B值:
299 29B 2AD 2AF 2B1 2B5 2B7 2B8 2C6 2C8 2CC 2CF。。。。。
2008-12-21 12:56
0
游客
登录 | 注册 方可回帖
返回
//