网游难民 发表于 2006-11-24 19:39:24

菜鸟也学密码学--MD5

:L 在DZ论坛里偶怎么排不好版??
看不清楚的朋友去看雪先参考下:
http://bbs.pediy.com/showthread.php?s=&threadid=35455


【文章标题】: 菜鸟也学密码学--MD5
【文章作者】: 网游难民
【作者主页】: www.chinapyg.com
【下载地址】: 本地
【作者声明】: 菜鸟初次接触MD5,失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
看到论坛里好多朋友都在玩密码学加密的软件,偶菜鸟也不甘落后,也来学习下MD5,下面是偶的学习笔记,希望能学习密码学的朋友们提供些帮助。
下面我们用黑夜彩虹老大分析过的一个CM来学习下:)
偶用自己机器上的数据来给大家解释下MD5是怎么实现的,下面是偶用来学习的数据。

机器码:F2918A44BFEBFBFF
用户名:goqq2008
注册码:9876543210

0045184D|.8D55 E0       lea   edx, dword ptr
00451850|.8B83 08030000 mov   eax, dword ptr
00451856|.E8 81E3FDFF   call    0042FBDC
0045185B|.8B55 E0       mov   edx, dword ptr              ;用户名(goqq2008)
0045185E|.58            pop   eax
0045185F|.E8 7428FBFF   call    004040D8
00451864|.8B45 E4       mov   eax, dword ptr              ;机器码+用户名(F2918A44BFEBFBFFgoqq2008)
00451867|.8D55 E8       lea   edx, dword ptr
0045186A|.E8 6DFBFFFF   call    004513DC                            ;MD5加密,关键CALL1,F7跟进~
0045186F|.8D45 E8       lea   eax, dword ptr
00451872|.8D55 F8       lea   edx, dword ptr
00451875|.E8 D6FBFFFF   call    00451450
0045187A|.8B55 F8       mov   edx, dword ptr             ;MD5加密后的结果放在EDX中~
0045187D|.58            pop   eax
0045187E|.E8 9929FBFF   call    0040421C
00451883|.75 1A         jnz   short 0045189F                      ;关键跳转
00451885|.6A 40         push    40
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
跟进关键CALL1:
00451422|.8BD3          mov   edx, ebx
00451424|.8D45 A4       lea   eax, dword ptr
00451427|.E8 3CFFFFFF   call    00451368                            ;关键CALL2,跟进~
0045142C|.33C0          xor   eax, eax
0045142E|.5A            pop   edx
+++++++++++++++++++++++++++++++++++++++++++++++++++++
跟进关键CALL2:
004513B1|.8BC3          mov   eax, ebx
004513B3|.B9 08000000   mov   ecx, 8
004513B8|.E8 2BFFFFFF   call    004512E8                            ;关键CALL3,跟进
004513BD|.8BD6          mov   edx, esi
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
跟进关键CALL3:
0045132B|.8BD6          mov   edx, esi
0045132D|.8D46 18       lea   eax, dword ptr
00451330|.E8 4FF8FFFF   call    00450B84                            ;关键CALL4,跟进
00451335|.EB 0E         jmp   short 00451345
00451337|>8BD6          /mov   edx, esi
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
00450B84/$53            push    ebx                                 ;终于到达MD5加密的地方了~~:)
00450B85|.56            push    esi
00450B86|.57            push    edi
00450B87|.55            push    ebp
00450B88|.83C4 A8       add   esp, -58
00450B8B|.895424 04   mov   dword ptr , edx
00450B8F|.890424      mov   dword ptr , eax
00450B92|.8D5C24 08   lea   ebx, dword ptr
00450B96|.8D7424 0C   lea   esi, dword ptr
00450B9A|.8D7C24 10   lea   edi, dword ptr
00450B9E|.8D6C24 14   lea   ebp, dword ptr
00450BA2|.8D5424 18   lea   edx, dword ptr
00450BA6|.B9 40000000   mov   ecx, 40
00450BAB|.8B0424      mov   eax, dword ptr
00450BAE|.E8 5DFFFFFF   call    00450B10                            ;增加填充,补足长度
——————————————————————————————————
第一步:增加填充
增加padding使得数据长度(bit为单位)模512为448。如果数据长度正好是模512为448,增加512个填充bit,也就是说填充的个数为1-512。第一个bit为1,其余全部为0。
第二步:补足长度
将数据长度转换为64bit的数值,如果长度超过64bit所能表示的数据长度的范围,值保留最后64bit,增加到前面填充的数据后面,使得最后的数据为512bit的整数倍。也就是32bit的16倍的整数倍。在RFC1321中,32bit称为一个word。

第一步:增加填充
因为我这里要用MD5加密的数据是 F2918A44BFEBFBFFgoqq2008   。一共有192位,如果填充到模512为448,一共要填充256位,既第一个为1(二进制),255个0。
第二步:补足长度
F2918A44BFEBFBFFgoqq2008 转换为二进制共192位,二进制表示为11000000,共8位,要补足64位后面要再加56个0。

所以补足长度后的数值如下(16进制表示):
0012F51446 32 39 31 38 41 34 34 42 46 45 42 46 42 46 46F2918A44BFEBFBFF
0012F52467 6F 71 71 32 30 30 38 80 00 00 00 00 00 00 00goqq2008

avel 发表于 2006-11-24 23:25:44

哇靠~!
虽然看的迷糊死人~!
不过忒强了~~~~~

feifei525 发表于 2006-11-25 18:11:21

谢谢朋友分享啊.偶也来看一看.

盱眙浪子 发表于 2007-1-2 04:04:41

嘿嘿 汇编学的不咋滴 先去温习下
页: [1]
查看完整版本: 菜鸟也学密码学--MD5