菜鸟也学密码学--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 哇靠~!
虽然看的迷糊死人~!
不过忒强了~~~~~ 谢谢朋友分享啊.偶也来看一看. 嘿嘿 汇编学的不咋滴 先去温习下
页:
[1]