【算法系列】MD5算法分析 2013.6.20
本帖最后由 PoJie_小雨 于 2013-6-20 23:56 编辑【文章标题】:【算法系列】MD5算法分析 2013.6.20
【文章作者】: xiaoyu
【作者邮箱】: hy_xiaoyu@126.com
【保护方式】: none
【使用工具】: PEiD,OllyDbg
【编程语言】:Borland Delphi 6.0 - 7.0
【作者声明】: 主要记录自己的学习过程!欢迎交流学习
【编程语言】:Microsoft Visual C++ 6.0
【下载地址】: http://pan.baidu.com/share/link?shareid=1620370201&uk=892352529
--------------------------------------------------------------------------------
1.首先 查壳发现无壳
接着我们用OD载入:
--------------------------------------------------------------------------------
由于是分析算法在函数GetDlgItemTextA下断点
PS:谢谢shark提醒 补充下:
这是一个常用的API函数GetDlgItemText原型末尾没有A
它的作用是获取对话框文本属于User32.DLL
而OD在反汇编中将这个函数反汇编成
GetDlgItemTextA或者
GetDlgItemTextW
GetDlgItemTextA 是ASCII版本
而GetDlgItemTextW 是Unicode的版本
运行起来,输入帐号xiaoyu注册码:1234567890
点击“注册认证”
程序被断下来,我们F8单步走,马上来到
如图所示:
--------------------------------------------------------------------------------
继续单步走:
发现了兴奋点:
单步走:
004028F2 .6A 00 push 0
004028F4 .8D8C24 100100>lea ecx,dword ptr ss:
004028FB .50 push eax
004028FC .51 push ecx
PUSH这几句是保护现场
004028F4 .8D8C24 100100>lea ecx,dword ptr ss:
这句是将name 存于ECX
走到004028FD的CALL
我们进去看一下
0040261B|.53 push ebx
0040261C|.55 push ebp
0040261D|.56 push esi
0040261E|.57 push edi ;保护现场
0040261F|.8D8C24 DC0000>lea ecx,dword ptr ss:
00402626|.E8 15F2FFFF call MD5Crack.00401840 ;MD5算法CALL
我们进去这个算法CALL
00401840/$8BC1 mov eax,ecx
00401842|.33C9 xor ecx,ecx
00401844|.8848 04 mov byte ptr ds:,cl
00401847|.C700 F0B04000 mov dword ptr ds:,MD5Crack.0040B0F0
0040184D|.C740 08 01234>mov dword ptr ds:,67452301
00401854|.C740 0C 89ABC>mov dword ptr ds:,EFCDAB89
0040185B|.C740 10 FEDCB>mov dword ptr ds:,98BADCFE
00401862|.C740 14 76543>mov dword ptr ds:,10325476
根据4个常数,很可能就是MD5的初始化,
继续单步走
有些CALL 大家可以自行分析
最后单步走来到这里:
进入这个CALL,比较:
将之前存的散列MD5值 与用户的serial相比较
感觉好乱。。。。。。。。。。
【总结算法】:MD5算法将用到4个常数
因此有个地方必须有这四个常数的初始化
本例子中 在之前的MD5初始化的call里出现了
大家可以尝试写个注册机!
Shark恒 发表于 2013-6-20 23:45 static/image/common/back.gif
我抢个沙发先?
建议小雨写出GetDlgItemTextA下断的过程与原因。
这是一个常用的API函数GetDlgItemText原型末尾没有A
它的作用是获取对话框文本属于User32.DLL
而OD在反汇编中将这个函数反汇编成
GetDlgItemTextA或者
GetDlgItemTextW
GetDlgItemTextA 是ASCII版本
而GetDlgItemTextW 是Unicode的版本 为什么不是下getWindowtext断点呢 1354669803 发表于 2013-6-21 00:02 static/image/common/back.gif
为什么不是下getWindowtext断点呢
GetWindowText 是用来一个窗体的标题的,与你的name 以及serial 无直接联系 学习了………………………… 膜拜大牛..{:1_931:} zhigaows 发表于 2013-6-21 00:05 static/image/common/back.gif
学习了…………………………
~~~~~~~加油 淡然出尘 发表于 2013-6-21 00:06 static/image/common/back.gif
膜拜大牛..
。。。。。。。。别谦虚好吗?
前来膜拜一下,MD5什么的,听起来就好牛逼。
页:
[1]
2