好友
阅读权限35
听众
最后登录1970-1-1
|
本帖最后由 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:[esp+110]
004028FB . 50 push eax
004028FC . 51 push ecx
PUSH这几句是保护现场
004028F4 . 8D8C24 100100>lea ecx,dword ptr ss:[esp+110]
这句是将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:[esp+DC]
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:[eax+4],cl
00401847 |. C700 F0B04000 mov dword ptr ds:[eax],MD5Crack.0040B0F0
0040184D |. C740 08 01234>mov dword ptr ds:[eax+8],67452301
00401854 |. C740 0C 89ABC>mov dword ptr ds:[eax+C],EFCDAB89
0040185B |. C740 10 FEDCB>mov dword ptr ds:[eax+10],98BADCFE
00401862 |. C740 14 76543>mov dword ptr ds:[eax+14],10325476
根据4个常数,很可能就是MD5的初始化,
继续单步走
有些CALL 大家可以自行分析
最后单步走来到这里:
进入这个CALL,比较:
将之前存的散列MD5值 与用户的serial相比较
感觉好乱。。。。。。。。。。
【总结算法】:MD5算法将用到4个常数
因此有个地方必须有这四个常数的初始化
本例子中 在之前的MD5初始化的call里出现了
大家可以尝试写个注册机!
|
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|