能力值:
( LV9,RANK:170 )
|
-
-
51 楼
这个帖子我每次都来看是否有新续贴,但我从不回复
因为我很感兴趣但很无奈这个话题,因为我不懂
|
能力值:
( LV2,RANK:10 )
|
-
-
52 楼
我是新手刚进来两天在破解简单的软件时遇到了2个问题 1. getvbres v0.51上一个修改的按纽不能用也就是说不能修改字符串了. 2.为什么用OD的时候总是搜索不到关键的字符串呢? 那为大侠帮帮我解决一下 不胜感激啊!!!!
|
能力值:
( LV2,RANK:10 )
|
-
-
53 楼
关于OD中找不到关键字符串的问题,以前也遇到过,明明用UltraEdit打开看二进制数据是有那些关键词的,但OD查找失败。我认为可能有如下原因:
1、Unicode编码问题
2、对关键字符串进行了变形隐蔽,直接查找是不行的
当时我用W32dasm8.93进行反汇编查找,可以找到,所以建议你试试,有时需要几个工具配合使用才能达到目的。
|
能力值:
( LV2,RANK:10 )
|
-
-
54 楼
不是测试有误,而是你没有看清我说的,代码其实早就给你提供了。
你的唯一错误就是将块号搞错了,你提供的数据对应的块号是0x00000000,
你只需将块号赋值为0x00000001,肯定就行了。
|
能力值:
( LV2,RANK:10 )
|
-
-
55 楼
我这几天做了各种测试,包括您说的把块号改为1,也就是把byteA[]的第5至8字节赋值1。也还是不成功。继续找原因。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
56 楼
将块号设置为0x00000001后(原因已经讲过了),正确的数据为:
A值:(49 109 90 10 4)
A值经由md5得到128比特的rc4密钥:(102, 136, 177, 231, 82, 233, 192, 60, 211, 78, 151, 162, 168, 168, 90, 57)
然后通过RC4加密得到B值:(140, 242, 76, 34, 95)
|
能力值:
( LV2,RANK:10 )
|
-
-
57 楼
我认为是你的编程有问题。
|
能力值:
( LV2,RANK:10 )
|
-
-
58 楼
jeffcjh;534374]将块号设置为0x00000001后(原因已经讲过了),正确的数据为:
A值:(49 109 90 10 4)
A值经由md5得到128比特的rc4密钥:(102, 136, 177, 231, 82, 233, 192, 60, 211, 78, 151, 162, 168, 168, 90
然后通过RC4加密得到B值:(140, 242, 76, 34, 95)
这个B值与0x400位置所取的连续5字节的B值不相同。
有可能是我开始获取A值的代码都有问题。检查中。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
59 楼
还有一个问题
// 对9字节(不是64字节)作标准的MD5 !!!
MD5Data((unsigned char*)byteA, 9, byteB);
为什么是9字节而不是64字节?
在http://www.team509.com/download/MS_Word_encrypt.pdf这篇文章里的内容以及开源软件wv-0.7.2里面的代码都说是64字节啊。而且我编写的那个暴力破解word的密码也是通过了测试了。
|
能力值:
( LV2,RANK:10 )
|
-
-
60 楼
MD5算法本来是对任意长度的数据(包括长度为0的空数据)进行散列得到16字节结果。
其实将数据传给MD5算法后,在MD5内部是要按照算法本身的需要进行填充的,而你现在在MD5外面进行了填充,这个填充不知道是否正确(我认为可能错误)。到底是对是错,你拿上面我给出的测试数据进行调试验证一下即可,再贴一次也无妨:
将块号设置为0x00000001后(原因已经讲过了),正确的数据为:
A值:(49 109 90 10 4)
A值经由md5得到128比特的rc4密钥:(102, 136, 177, 231, 82, 233, 192, 60, 211, 78, 151, 162, 168, 168, 90, 57)
然后通过RC4加密得到B值:(140, 242, 76, 34, 95)
|
能力值:
( LV2,RANK:10 )
|
-
-
61 楼
如果按你原来的填充能得到这个结果,说明填充与MD5本身的需要一致。不过即便正确,这个填充也是完全多余的。
|
能力值:
( LV2,RANK:10 )
|
-
-
62 楼
按照您说的改成这样了:
ArrayByteA = array [0..4] of byte;
Array16Byte = array [0..15] of byte;
function MakeKey(byteA: ArrayByteA):Array16Byte;
var
mdContext: MD5Context;
pwarray: array [0..8] of byte;
byteB: Array16Byte;
block: DWord;
begin
block := 0;
Fillchar(pwarray,sizeof(pwarray),0); //pwarray数组清零
CopyMemory(@pwarray, @byteA, 5); //拷过去40位(5个字节)
//put block number in byte 6...9
pwarray[5] := 1;
pwarray[6] := 1;
pwarray[7] := 1;
pwarray[8] := 1;
//对pwarrey计算一轮标准的MD5 hash begin
MD5Init(mdContext);
MD5Update (mdContext, @pwarray, 9);
MD5StoreDigest(mdContext);
//对pwarrey计算一轮标准的MD5 hash end
CopyMemory(@byteB, @mdContext.Digest, 16);
result := byteB;
end;
byteA值:(49 109 90 10 4)
调用 MakeKey(byteA) 得到128比特的rc4密钥却是:
(1, 35, 69, 103, 137, 171, 205, 239, 254, 220, 186, 152, 118, 84, 50, 16)
|
能力值:
( LV2,RANK:10 )
|
-
-
63 楼
A值:(49 109 90 10 4)
A值经由md5得到128比特的rc4密钥:(102, 136, 177, 231, 82, 233, 192, 60, 211, 78, 151, 162, 168, 168, 90, 57)
然后通过RC4加密得到B值:(140, 242, 76, 34, 95)
您的这个结果是对的。查询word文档中的0x400的值就是您算出来的那个B值。估计是我的md5的算法有问题,奇怪了,我的md5的算法是通用的啊,已经在其它程序中测试通过了啊。您能不能把您的MD5的三个函数MD5Init(&ctx);MD5Update(&ctx, data, len);MD5Final(digest, &ctx);的具体代码贴出来?我看看与我的md5的算法有啥区别。
|
能力值:
( LV2,RANK:10 )
|
-
-
64 楼
你早把你的VB代码贴出来问题就早解决了。
我认为你的MD5算法没问题,而是你对块号的填充不对,应该为:
pwarray[5] := 1;
pwarray[6] := 0;
pwarray[7] := 0;
pwarray[8] := 0;
我早反复说了块号要赋值为0x00000001啊,而你现在的赋值是0x01010101,能对吗?
改了这里就对了,我想。
|
能力值:
( LV2,RANK:10 )
|
-
-
65 楼
块号要赋值为0x00000001,如果一个字节一个字节赋值的话,就要颠倒过来看了,所以是:
pwarray[5] := 1;
pwarray[6] := 0;
pwarray[7] := 0;
pwarray[8] := 0;
这是32bite整数在I(NTEL指令格式)内存中的布局方法,你应该理解。
|
能力值:
( LV2,RANK:10 )
|
-
-
66 楼
[QUOTE=jeffcjh;534968]块号要赋值为0x00000001,如果一个字节一个字节赋值的话,就要颠倒过来看了,所以是:
pwarray[5] := 1;
pwarray[6] := 0;
pwarray[7] := 0;
pwarray[8] := 0;
这是32bite整数在I(NTEL指令格式)内存中的布局方法,...[/QUOTE]
这是32比特整数在(INTEL指令格式)内存中的布局方法,你应该理解。
|
能力值:
( LV2,RANK:10 )
|
-
-
67 楼
谢谢了。就是这个原因了。唉,这个小小的问题困扰了我几乎两个星期啊。再次感谢!
|
能力值:
( LV2,RANK:10 )
|
-
-
68 楼
看来我的直觉没错,我之前明示你的编程有问题。
|
能力值:
( LV2,RANK:10 )
|
-
-
69 楼
不过有了这样的教训,以后遇到问题可能会有更多的思路。
|
能力值:
( LV2,RANK:10 )
|
-
-
70 楼
嗯。谢谢你这几个月以来一直耐心的给我讲解。太感谢了!!!
|
能力值:
( LV2,RANK:10 )
|
-
-
71 楼
互相学习,共同提高。
|
能力值:
( LV2,RANK:10 )
|
-
-
72 楼
我觉得大家应该讨论一下彩虹链的方法。用全表查找的方法需要大量的空间。我想大家应该不会有那么多的空间和那么强的计算能力。你花费那么多的代价不太值。如果我用128bit的加密,那空间就更不能承受了
|
能力值:
( LV2,RANK:10 )
|
-
-
73 楼
如果想保证100%的成功率,只有使用完全查表的方法;当然对于128比特的密钥,目前来说是没有什么破解方法的。
彩虹链可以大大降低存储条件,但通常只能保障99%以上的成功率。
然而,不论是全查表还是彩虹链,两种方法都是要预先对整个密码函数的输入空间都计算一遍的,所以需要同样的计算能力。不过,LZ有这样大的计算能力和存储空间,所以他就没有深入考虑彩虹链的实现了。
|
能力值:
( LV2,RANK:10 )
|
-
-
74 楼
不一定,国外那些破解软件应该就是用全查表的方法的吧。其实8T左右的空间应该还能够承受。只是生成时间久了点而已。
彩虹链和全查表的方法各自所侧重的使用对象不同而已。
|
能力值:
( LV2,RANK:10 )
|
-
-
75 楼
jeffcjh,得到密码之后,您做过使用密码来解密文档的内容的工作吗?
一个加密的WORD或者EXCEL文档,用二进制工具来查看,不是所有的字节都加密的,那么该怎样处理呢?
|
|
|