首页
社区
课程
招聘
[讨论]关于MD5的算法问题
2008-5-19 14:57 5781

[讨论]关于MD5的算法问题

2008-5-19 14:57
5781
0048671A    E8 71FEFFFF     call    00486590  堆
0048671F    8D45 E4         lea     eax, dword ptr [ebp-1C]栈 ss:[0012FE5C]=01033FD0, (ASCII "Ea3st8Re#m04170B5DAB63041B") 给他变成32位密文
eax=00000010             7885265317e0d0bd3f810bc2b12523be

00486722    8D55 D8         lea     edx, dword ptr [ebp-28]
00486725    E8 DAFEFFFF     call    00486604 算法CALL
0048672A    8B45 D8         mov     eax, dword ptr [ebp-28] 堆栈 ss:[0012FE54]=010307C4, (ASCII "f6d063d0088c3890374cc7f81d73e9d6")
eax=00000000

关健CALL跟进
00486604    55              push    ebp
00486605    8BEC            mov     ebp, esp
00486607    83C4 E8         add     esp, -18
0048660A    53              push    ebx
0048660B    56              push    esi
0048660C    57              push    edi
0048660D    33C9            xor     ecx, ecx
0048660F    894D EC         mov     dword ptr [ebp-14], ecx
00486612    894D E8         mov     dword ptr [ebp-18], ecx
00486615    8BF0            mov     esi, eax
00486617    8D7D F0         lea     edi, dword ptr [ebp-10]
0048661A    A5              movs    dword ptr es:[edi], dword ptr [esi]
0048661B    A5              movs    dword ptr es:[edi], dword ptr [esi]
0048661C    A5              movs    dword ptr es:[edi], dword ptr [esi]
0048661D    A5              movs    dword ptr es:[edi], dword ptr [esi]
0048661E    8BFA            mov     edi, edx
00486620    33C0            xor     eax, eax
00486622    55              push    ebp
00486623    68 9F664800     push    0048669F
00486628    64:FF30         push    dword ptr fs:[eax]
0048662B    64:8920         mov     dword ptr fs:[eax], esp
0048662E    8BC7            mov     eax, edi
00486630    E8 D7E3F7FF     call    00404A0C
00486635    B3 10           mov     bl, 10
00486637    8D75 F0         lea     esi, dword ptr [ebp-10]
0048663A    FF37            push    dword ptr [edi]
0048663C    8D45 EC         lea     eax, dword ptr [ebp-14]
0048663F    33D2            xor     edx, edx
00486641    8A16            mov     dl, byte ptr [esi]
00486643    C1EA 04         shr     edx, 4
00486646    83E2 0F         and     edx, 0F
00486649    8A92 44A45300   mov     dl, byte ptr [edx+53A444]
0048664F    E8 A0E5F7FF     call    00404BF4
00486654    FF75 EC         push    dword ptr [ebp-14]
00486657    8D45 E8         lea     eax, dword ptr [ebp-18]
0048665A    8A16            mov     dl, byte ptr [esi]
0048665C    80E2 0F         and     dl, 0F
0048665F    81E2 FF000000   and     edx, 0FF
00486665    8A92 44A45300   mov     dl, byte ptr [edx+53A444]
0048666B    E8 84E5F7FF     call    00404BF4
00486670    FF75 E8         push    dword ptr [ebp-18]
00486673    8BC7            mov     eax, edi
00486675    BA 03000000     mov     edx, 3
0048667A    E8 0DE7F7FF     call    00404D8C
0048667F    46              inc     esi
00486680    FECB            dec     bl
00486682  ^ 75 B6           jnz     short 0048663A
00486684    33C0            xor     eax, eax
00486686    5A              pop     edx
00486687    59              pop     ecx
00486688    59              pop     ecx
00486689    64:8910         mov     dword ptr fs:[eax], edx
0048668C    68 A6664800     push    004866A6
00486691    8D45 E8         lea     eax, dword ptr [ebp-18]
00486694    BA 02000000     mov     edx, 2
00486699    E8 92E3F7FF     call    00404A30
0048669E    C3              retn
0048669F  ^ E9 08DCF7FF     jmp     004042AC
004866A4  ^ EB EB           jmp     short 00486691
004866A6    5F              pop     edi
004866A7    5E              pop     esi
004866A8    5B              pop     ebx
004866A9    8BE5            mov     esp, ebp
004866AB    5D              pop     ebp
004866AC    C3              retn

请问一下f6d063d0088c3890374cc7f81d73e9d6这个MD5密文是根据什么算出来的
能在算法CALL里边看到他算之前的明文吗。

[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

收藏
点赞0
打赏
分享
最新回复 (10)
雪    币: 58
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jeffcjh 2008-5-19 23:53
2
0
你的注视有点错乱。能够确定的是:
md5("Ea3st8Re#m04170B5DAB63041B") == 0x7885265317e0d0bd3f810bc2b12523be,
而f6d063d0088c3890374cc7f81d73e9d6是根据16字节值0x7885265317e0d0bd3f810bc2b12523be来计算的。
雪    币: 162
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
upxshell 2008-5-24 10:13
3
0
还是不太明白  7885265317e0d0bd3f810bc2b12523be 生成出来的MD5是13b47ebc30c1da65f70610020abe5287。
雪    币: 162
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
upxshell 2008-5-24 10:26
4
0
谢谢你的回复,
不过还是不太明白  7885265317e0d0bd3f810bc2b12523be 生成出来的MD5是13b47ebc30c1da65f70610020abe5287
你说的而f6d063d0088c3890374cc7f81d73e9d6是根据16字节值0x7885265317e0d0bd3f810bc2b12523be来计算的。
7885265317E0D0BD3F810BC2B12523BE 这个16进制应该是3738383532363533313745304430424433463831304243324231323532334245,生成的MD5还不是f6d063d0088c3890374cc7f81d73e9d6
雪    币: 58
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jeffcjh 2008-5-24 14:50
5
0
根据WinMD5工具可知,字符串数据"Ea3st8Re#m04170B5DAB63041B"的MD5散列值等于 0x7885265317e0d0bd3f810bc2b12523be这16字节。
随后代码00486725    E8 DAFEFFFF     call    00486604
将对0x7885265317e0d0bd3f810bc2b12523be进行计算,得到
f6d063d0088c3890374cc7f81d73e9d6
由于在call    00486604 函数中还要调用其它函数(你未给出),所以这一步的计算过程就
不知道是如何的了,但我j基本可以确定不是MD5。
雪    币: 58
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jeffcjh 2008-5-24 14:59
6
0
也就是说,
"Ea3st8Re#m04170B5DAB63041B" 经MD5计算得0x7885265317e0d0bd3f810bc2b12523be;

0x7885265317e0d0bd3f810bc2b12523be经函数sub_00486604计算得0xf6d063d0088c3890374cc7f81d73e9d6;

但函数sub_00486604应该不是MD5算法了,到底是什么转换只有详细跟踪sub_00486604及其内部的几个子函数(你未给出),能够看出的是它们对0x7885265317e0d0bd3f810bc2b12523be每4比特进行一次转换。总之,我觉得应该不难确定。
雪    币: 162
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
upxshell 2008-5-24 16:37
7
0
谢谢,我以为还是MD5呢,这个真复杂呀,麻烦在看一下吧,谢谢,你有没有其它的联系方式,我的QQ是30696299
00486604    55              push    ebp
00486605    8BEC            mov     ebp, esp
00486607    83C4 E8         add     esp, -18
0048660A    53              push    ebx
0048660B    56              push    esi
0048660C    57              push    edi
0048660D    33C9            xor     ecx, ecx
0048660F    894D EC         mov     dword ptr [ebp-14], ecx
00486612    894D E8         mov     dword ptr [ebp-18], ecx
00486615    8BF0            mov     esi, eax
00486617    8D7D F0         lea     edi, dword ptr [ebp-10]
0048661A    A5              movs    dword ptr es:[edi], dword ptr [e>
0048661B    A5              movs    dword ptr es:[edi], dword ptr [e>
0048661C    A5              movs    dword ptr es:[edi], dword ptr [e>
0048661D    A5              movs    dword ptr es:[edi], dword ptr [e>
0048661E    8BFA            mov     edi, edx
00486620    33C0            xor     eax, eax
00486622    55              push    ebp
00486623    68 9F664800     push    0048669F
00486628    64:FF30         push    dword ptr fs:[eax]
0048662B    64:8920         mov     dword ptr fs:[eax], esp
0048662E    8BC7            mov     eax, edi
00486630    E8 D7E3F7FF     call    00404A0C
00486635    B3 10           mov     bl, 10
00486637    8D75 F0         lea     esi, dword ptr [ebp-10]
0048663A    FF37            push    dword ptr [edi]
0048663C    8D45 EC         lea     eax, dword ptr [ebp-14]
0048663F    33D2            xor     edx, edx
00486641    8A16            mov     dl, byte ptr [esi]
00486643    C1EA 04         shr     edx, 4
00486646    83E2 0F         and     edx, 0F
00486649    8A92 44A45300   mov     dl, byte ptr [edx+53A444]
0048664F    E8 A0E5F7FF     call    00404BF4
00486654    FF75 EC         push    dword ptr [ebp-14]
00486657    8D45 E8         lea     eax, dword ptr [ebp-18]
0048665A    8A16            mov     dl, byte ptr [esi]
0048665C    80E2 0F         and     dl, 0F
0048665F    81E2 FF000000   and     edx, 0FF
00486665    8A92 44A45300   mov     dl, byte ptr [edx+53A444]
0048666B    E8 84E5F7FF     call    00404BF4
00486670    FF75 E8         push    dword ptr [ebp-18]
00486673    8BC7            mov     eax, edi
00486675    BA 03000000     mov     edx, 3
0048667A    E8 0DE7F7FF     call    00404D8C
0048667F    46              inc     esi
00486680    FECB            dec     bl
00486682  ^ 75 B6           jnz     short 0048663A
00486684    33C0            xor     eax, eax
00486686    5A              pop     edx
00486687    59              pop     ecx
00486688    59              pop     ecx
00486689    64:8910         mov     dword ptr fs:[eax], edx
0048668C    68 A6664800     push    004866A6
00486691    8D45 E8         lea     eax, dword ptr [ebp-18]
00486694    BA 02000000     mov     edx, 2
00486699    E8 92E3F7FF     call    00404A30
0048669E    C3              retn

00404A0C    8B10            mov     edx, dword ptr [eax]
00404A0E    85D2            test    edx, edx
00404A10    74 1C           je      short 00404A2E
00404A12    C700 00000000   mov     dword ptr [eax], 0
00404A18    8B4A F8         mov     ecx, dword ptr [edx-8]
00404A1B    49              dec     ecx
00404A1C    7C 10           jl      short 00404A2E
00404A1E    F0:FF4A F8      lock dec dword ptr [edx-8]
00404A22    75 0A           jnz     short 00404A2E
00404A24    50              push    eax
00404A25    8D42 F8         lea     eax, dword ptr [edx-8]
00404A28    E8 23DEFFFF     call    00402850
00404A2D    58              pop     eax
00404A2E    C3              retn

00404BF4    52              push    edx
00404BF5    89E2            mov     edx, esp
00404BF7    B9 01000000     mov     ecx, 1
00404BFC    E8 FBFEFFFF     call    00404AFC
00404C01    5A              pop     edx
00404C02    C3              retn

00404AFC    53              push    ebx
00404AFD    56              push    esi
00404AFE    57              push    edi
00404AFF    89C3            mov     ebx, eax
00404B01    89D6            mov     esi, edx
00404B03    89CF            mov     edi, ecx
00404B05    89F8            mov     eax, edi
00404B07    E8 C4FFFFFF     call    00404AD0
00404B0C    89F9            mov     ecx, edi
00404B0E    89C7            mov     edi, eax
00404B10    85F6            test    esi, esi
00404B12    74 09           je      short 00404B1D
00404B14    89C2            mov     edx, eax
00404B16    89F0            mov     eax, esi
00404B18    E8 1BDFFFFF     call    00402A38
00404B1D    89D8            mov     eax, ebx
00404B1F    E8 E8FEFFFF     call    00404A0C
00404B24    893B            mov     dword ptr [ebx], edi
00404B26    5F              pop     edi
00404B27    5E              pop     esi
00404B28    5B              pop     ebx
00404B29    C3              retn

00404D8C    53              push    ebx
00404D8D    56              push    esi
00404D8E    57              push    edi
00404D8F    52              push    edx
00404D90    50              push    eax
00404D91    89D3            mov     ebx, edx
00404D93    31FF            xor     edi, edi
00404D95    8B4C94 14       mov     ecx, dword ptr [esp+edx*4+14]
00404D99    85C9            test    ecx, ecx
00404D9B    74 0C           je      short 00404DA9
00404D9D    3908            cmp     dword ptr [eax], ecx
00404D9F    75 08           jnz     short 00404DA9
00404DA1    89CF            mov     edi, ecx
00404DA3    8B41 FC         mov     eax, dword ptr [ecx-4]
00404DA6    4A              dec     edx
00404DA7    EB 02           jmp     short 00404DAB
00404DA9    31C0            xor     eax, eax
00404DAB    8B4C94 14       mov     ecx, dword ptr [esp+edx*4+14]
00404DAF    85C9            test    ecx, ecx
00404DB1    74 09           je      short 00404DBC
00404DB3    0341 FC         add     eax, dword ptr [ecx-4]
00404DB6    39CF            cmp     edi, ecx
00404DB8    75 02           jnz     short 00404DBC
00404DBA    31FF            xor     edi, edi
00404DBC    4A              dec     edx
00404DBD  ^ 75 EC           jnz     short 00404DAB
00404DBF    85FF            test    edi, edi
00404DC1    74 17           je      short 00404DDA
00404DC3    89C2            mov     edx, eax
00404DC5    8B0424          mov     eax, dword ptr [esp]
00404DC8    8B77 FC         mov     esi, dword ptr [edi-4]
00404DCB    E8 88020000     call    00405058
00404DD0    8B3C24          mov     edi, dword ptr [esp]
00404DD3    FF37            push    dword ptr [edi]
00404DD5    0337            add     esi, dword ptr [edi]
00404DD7    4B              dec     ebx
00404DD8    EB 08           jmp     short 00404DE2
00404DDA    E8 F1FCFFFF     call    00404AD0
00404DDF    50              push    eax
00404DE0    89C6            mov     esi, eax
00404DE2    8B449C 18       mov     eax, dword ptr [esp+ebx*4+18]
00404DE6    89F2            mov     edx, esi
00404DE8    85C0            test    eax, eax
00404DEA    74 0A           je      short 00404DF6
00404DEC    8B48 FC         mov     ecx, dword ptr [eax-4]
00404DEF    01CE            add     esi, ecx
00404DF1    E8 42DCFFFF     call    00402A38
00404DF6    4B              dec     ebx
00404DF7  ^ 75 E9           jnz     short 00404DE2
00404DF9    5A              pop     edx
00404DFA    58              pop     eax
00404DFB    85FF            test    edi, edi
00404DFD    75 0C           jnz     short 00404E0B
00404DFF    85D2            test    edx, edx
00404E01    74 03           je      short 00404E06
00404E03    FF4A F8         dec     dword ptr [edx-8]
00404E06    E8 55FCFFFF     call    00404A60
00404E0B    5A              pop     edx
00404E0C    5F              pop     edi
00404E0D    5E              pop     esi
00404E0E    5B              pop     ebx
00404E0F    58              pop     eax
00404E10    8D2494          lea     esp, dword ptr [esp+edx*4]
00404E13    FFE0            jmp     eax
00404E15    C3              retn
雪    币: 2367
活跃值: (756)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
小虾 10 2008-5-24 16:46
8
0
你的程序将字符串"Ea3st8Re#m04170B5DAB63041B"用MD5算法算出"7885265317e0d0bd3f810bc2b12523be"字符串,再用MD5将"7885265317e0d0bd3f810bc2b12523be"字符串再算一次MD5就是"f6d063d0088c3890374cc7f81d73e9d6"字符串了,也就是你的算法进行了两次MD5算法。

MD5(MD5("Ea3st8Re#m04170B5DAB63041B"))=f6d063d0088c3890374cc7f81d73e9d6
雪    币: 2367
活跃值: (756)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
小虾 10 2008-5-24 16:53
9
0
注意,第一个字符串可以直接使用MD5计算,而用MD5计算出来的字符串必须将小写字母转换成大写字母再计算才是正确的。
雪    币: 162
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
upxshell 2008-5-24 16:53
10
0
不过00486704掉用的CALL和 00486725掉用的子CALL一样,00486704出来的就是标准的MD5,不知道为什么00486725出来的就不一样。
004866F9    E8 92FEFFFF     call    00486590
004866FE    8D45 E4         lea     eax, dword ptr [ebp-1C]
00486701    8D55 F4         lea     edx, dword ptr [ebp-C]
00486704    E8 FBFEFFFF     call    00486604   算出来标准MD5
00486709    8B45 F4         mov     eax, dword ptr [ebp-C]
0048670C    8D55 F8         lea     edx, dword ptr [ebp-8]
0048670F    E8 9C2CF8FF     call    004093B0  这个CALL是转换成大写的MD5
00486714    8D55 E4         lea     edx, dword ptr [ebp-1C]
00486717    8B45 F8         mov     eax, dword ptr [ebp-8]
0048671A    E8 71FEFFFF     call    00486590
0048671F    8D45 E4         lea     eax, dword ptr [ebp-1C]
00486722    8D55 D8         lea     edx, dword ptr [ebp-28]
00486725    E8 DAFEFFFF     call    00486604
0048672A    8B45 D8         mov     eax, dword ptr [ebp-28]
0048672D    8D55 DC         lea     edx, dword ptr [ebp-24]
00486730    E8 7B2CF8FF     call    004093B0
00486735    8B55 DC         mov     edx, dword ptr [ebp-24]
00486738    8D45 F8         lea     eax, dword ptr [ebp-8]
0048673B    E8 64E3F7FF     call    00404AA4
00486740    8B45 F8         mov     eax, dword ptr [ebp-8]
00486743    E8 84E5F7FF     call    00404CCC
00486748    83F8 20         cmp     eax, 20
0048674B    7E 16           jle     short 00486763
0048674D    8D45 F8         lea     eax, dword ptr [ebp-8]
雪    币: 162
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
upxshell 2008-5-24 17:03
11
0
知道了谢谢,昨天跟的时候,我记着用MD5工具大写的7885265317E0D0BD3F810BC2B12523BE,在经过MD5加密得出的也不是f6d063d0088c3890374cc7f81d73e9d6。今天一试就是了,真是奇怪了,可能少复制一个字母。谢谢两位的热心帮忙。这个问题解决整个软件的算法基本上已经明白了。
游客
登录 | 注册 方可回帖
返回