能力值:
( 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个字节有区别
|
能力值:
( LV2,RANK:10 )
|
-
-
152 楼
谢谢jeffcjh!!!
|
能力值:
( LV2,RANK:10 )
|
-
-
153 楼
是什么问题?
|
能力值:
( LV2,RANK:10 )
|
-
-
154 楼
说着说着就到第11页了。我原来停在第10页,看到你说还有最后一个问题。现在都解决了,看来你还是肯钻研的嘛。
|
能力值:
( LV2,RANK:10 )
|
-
-
155 楼
偶是来学习的~~顺便顶一下这篇好文章
|
能力值:
( LV4,RANK:50 )
|
-
-
156 楼
有价值,学习
|
能力值:
( 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个字节有区别。
|
能力值:
( LV2,RANK:10 )
|
-
-
158 楼
这是加密之后的结果,你把加密之前的这个记录的具体数据贴出来看看。
|
能力值:
( 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
是加密之后的结果,你把加密之前的这个记录的具体数据贴出来看看。
|
能力值:
( 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
与您解密之后的数据是一样的。
|
能力值:
( LV2,RANK:10 )
|
-
-
161 楼
这个有点怪异了。你的解密结果应该没啥大问题了,仅在某几个字节上不一致,可能是某个什么细节上没注意到。但是,我建议你对这点小问题暂时放过去,抓紧时间继续做更重要的下一步工作。
|
能力值:
( LV2,RANK:10 )
|
-
-
162 楼
我现在也在同时做下一步的工作了。
|
能力值:
( LV2,RANK:10 )
|
-
-
163 楼
这个没研究,都是用工具。
|
能力值:
( LV2,RANK:10 )
|
-
-
164 楼
jeffcjh,还有两个问题请教您:
1、Excel的乱数(即所讨论的输出B)是从哪个位置找呢?
2、前面生成的全查表也应该适用于Excel的加密文档吧,我生成的全查表时所调用的函数4是这样的RC4(K, 16, ks, 5),其中block为1。
|
能力值:
( 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来保存(具体实施时自可简化)。
|
能力值:
( LV2,RANK:10 )
|
-
-
166 楼
。。。
这样的话我已经产生的全查表不能适用与EXCEL,还需要重新再次产生。。。
|
能力值:
( 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])?
|
能力值:
( LV2,RANK:10 )
|
-
-
168 楼
对,这5个位置的乱数保存为B
|
能力值:
( LV2,RANK:10 )
|
-
-
169 楼
我之前生成的全查表,好像只能解密WORD2003文档,我今天试验了一下WORD2000,从0X400处取出的B值不完全相符的,有区别,是不是需要判断WORD的版本,根据不同的版本到不同的地方取B值?还是之前生成的全查表只能解密W0RD2003的加密文档呢?
|
能力值:
( LV2,RANK:10 )
|
-
-
170 楼
可能是其他问题。从word97至word2003的加密机制都一样。
|
能力值:
( LV2,RANK:10 )
|
-
-
171 楼
哦。是不是说我生成的全查表是没问题的,只需要从获取B值的位置方面找原因吗?我再好好查一查。
|
能力值:
( LV2,RANK:10 )
|
-
-
172 楼
jeffcjh:这几天我测试了WORD2003和WORD2002,都可以使用我生成的全查表来解密,但是WORD2000就有点问题,按照全查表的生成方法产生的B值是BB DB BB A7 40,而在0X400处找到的B值却是
00000400h: BB DB 69 A6 40 ,能否抽空帮我看看是什么原因?麻烦您了。
加密的文档已经发送您的邮箱里了。
|
能力值:
( LV2,RANK:10 )
|
-
-
173 楼
你并没有错,我将你发来的密文解密后发现文件偏移0x400处的5字节为
00 00 D2 01 00
正好与你的观察结果一致。
这说明了两点:
1、word2000的加密机制仍然与其它版本相同;
2、直接取文件偏移0x400处的5字节作为乱数来进行查表,在某些情况下不对。
所以你需要在文件偏移0x200至0x3ff之间找找固定底码的位置,按照前面所说的交集来确定同时适用于Word和Excel的情况,这是最佳解决方案。
|
能力值:
( LV2,RANK:10 )
|
-
-
174 楼
明白了。谢谢,继续研究中......如果有问题再请教您。
|
能力值:
( 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。。。。。
|
|
|