首页
社区
课程
招聘
[旧帖] [原创]爆破CrackMe.rar_492 0.00雪花
发表于: 2016-2-10 18:34 2182

[旧帖] [原创]爆破CrackMe.rar_492 0.00雪花

2016-2-10 18:34
2182
CrackMe提供者:random
原帖:http://bbs.pediy.com/showthread.php?t=8985

工具:od
平台:winxpsp3

这个程序有的麻烦。程序使用了一个不知名的框架,给函数定位增加了难度。本程序我没有分析透彻,所以只能简要说明一下,希望对初学者有帮助。
点击注册按钮,程序给出提示,按照要求随意输入注册码。再点击注册按钮。注册按钮响应函数入口如下:
00405CA0   .  6A FF         push    -1
00405CA2   .  68 90CC4100   push    0041CC90                                      ;  SE 处理程序安装
00405CA7   .  64:A1 0000000>mov     eax, dword ptr fs:[0]
00405CAD   .  50            push    eax
00405CAE   .  64:8925 00000>mov     dword ptr fs:[0], esp
00405CB5   .  83EC 48       sub     esp, 48
00405CB8   .  55            push    ebp
00405CB9   .  56            push    esi
00405CBA   .  33C0          xor     eax, eax
00405CBC   .  57            push    edi
00405CBD   .  8BF9          mov     edi, ecx
00405CBF   .  894424 14     mov     dword ptr [esp+14], eax
00405CC3   .  894424 18     mov     dword ptr [esp+18], eax
00405CC7   .  33C9          xor     ecx, ecx
00405CC9   .  884424 1C     mov     byte ptr [esp+1C], al
00405CCD   .  894C24 20     mov     dword ptr [esp+20], ecx
00405CD1   .  894424 38     mov     dword ptr [esp+38], eax
00405CD5   .  894C24 24     mov     dword ptr [esp+24], ecx
00405CD9   .  33D2          xor     edx, edx
00405CDB   .  894424 3C     mov     dword ptr [esp+3C], eax
00405CDF   .  8B35 D0E34100 mov     esi, dword ptr [<&USER32.SendMessageA>]       ;  USER32.SendMessageA
00405CE5   .  884C24 28     mov     byte ptr [esp+28], cl
00405CE9   .  895424 2C     mov     dword ptr [esp+2C], edx
00405CED   .  884424 40     mov     byte ptr [esp+40], al
00405CF1   .  8B47 3C       mov     eax, dword ptr [edi+3C]
00405CF4   .  8D4C24 14     lea     ecx, dword ptr [esp+14]
00405CF8   .  895424 30     mov     dword ptr [esp+30], edx
00405CFC   .  BD 08000000   mov     ebp, 8
00405D01   .  51            push    ecx                                           ; /lParam
00405D02   .  885424 38     mov     byte ptr [esp+38], dl                         ; |
00405D06   .  66:896C24 18  mov     word ptr [esp+18], bp                         ; |
00405D0B   .  52            push    edx                                           ; |wParam => 0
00405D0C   .  8B50 1C       mov     edx, dword ptr [eax+1C]                       ; |
00405D0F   .  68 C4000000   push    0C4                                           ; |Message = EM_GETLINE
00405D14   .  52            push    edx                                           ; |hWnd
00405D15   .  FFD6          call    esi                                           ; \SendMessageA

该函数使用SendMessage获取用户输入,然后对输入的字符进行检查,符合要求后保存用户输入到文件serial.txt,当时不验证而是重起验证。
既然输入保存到了文件里,我们就可以对CreateFile函数下断来定位验证函数。结果发现
00405358  |.  53            push    ebx
00405359  |.  53            push    ebx
0040535A  |.  68 885B4200   push    00425B88                                      ;  ASCII "serial.txt"
0040535F  |.  8D4C24 1C     lea     ecx, dword ptr [esp+1C]
00405363  |.  C64424 34 01  mov     byte ptr [esp+34], 1
00405368  |.  E8 7C2C0100   call    00417FE9                                      ;  打开文件读
0040536D  |.  85C0          test    eax, eax
0040536F  |.  74 19         je      short 0040538A
00405371  |.  6A 20         push    20
00405373  |.  68 44A24200   push    0042A244
00405378  |.  8D4C24 18     lea     ecx, dword ptr [esp+18]
0040537C  |.  E8 852D0100   call    00418106                                      ;  读文件数据
00405381  |.  8D4C24 10     lea     ecx, dword ptr [esp+10]
00405385  |.  E8 7A2E0100   call    00418204                                      ;  关闭文件

程序打开文件读取输入之后并没有比较动作,继续回推,发现一处貌似程序验证处,
004068B7   .  BF 44A24200   mov     edi, 0042A244                                 ;  ASCII "DJW12345DJW23456DJW34567DJW45678"
004068BC   .  83C9 FF       or      ecx, FFFFFFFF
004068BF   .  33C0          xor     eax, eax
004068C1   .  33D2          xor     edx, edx
004068C3   .  F2:AE         repne   scas byte ptr es:[edi]
004068C5   .  F7D1          not     ecx
004068C7   .  49            dec     ecx
004068C8   .  83F9 20       cmp     ecx, 20

在这里我们发现输入的注册码,然而这个函数非常繁琐,看得头大。最终费尽九牛二虎之力找到验证函数,
00404FFA   > \8B4424 10     mov     eax, dword ptr [esp+10]
00404FFE   .  85C0          test    eax, eax
00405000   .  0F85 CB000000 jnz     004050D1                        ;此处爆破

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 15990
活跃值: (4187)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
第一次前排,感谢楼主的分析
2016-2-10 23:12
0
游客
登录 | 注册 方可回帖
返回
//