admin管理员组

文章数量:1544579

Crackme逆向分析

逆向第一题,很简单,分分钟能搞定。题目大致是说找一个key,提示success就行。
Peid查一下没有任何壳,是vc写的程序,里面没有知名的算法。开始分析

错误的时候是这个样子
首先这一点就能给我们以下几点提示:
1此程序是vc写的,那么得到用户输入肯定是用到getdigitemtext系列函数,通过对函数下断即可以得到用户的输入
2.比较字符串,提示错误的字符串为done,查找字符串
3.失败与成功都会弹出对话框,那么同理也可也对messagebox系列函数下断
4.……其他 的方法暂且不说
直接getdigitemtext下断发现断不下,嗯嗯,后来查看程序的时候发现这个程序并不是调用了这个函数,而是他的同类型函数 GetWindowTextA,下断点之后,截断了用户的输入来到这个函数开头:

0042BAA3  |. 8B4D 10       mov ecx,[arg.3]
0042BAA6  |.  6AFF         push -0x1
0042BAA8  |.  E8846BFFFF   call CrackMe.00422631
0042BAAD  |.  EB0B         jmp XCrackMe.0042BABA
0042BAAF  |> 8B45 10       mov eax,[arg.3]
0042BAB2  |. FF30          push dword ptrds:[eax]
0042BAB4  |. 56            push esi
0042BAB5  |.  E8E4EBFFFF   call CrackMe.0042A69E
0042BABA  |> 5F            pop edi
0042BABB  |. 5E            pop esi
0042BABC  |. 5D            pop ebp
0042BABD  \.  C20C00       retn 0xC
,嗯嗯,直接单步掉,过几个跳转之后来到算法的地方:
00401420   .  6AFF         push -0x1
00401422   .  68D0904300   push CrackMe.004390D0                    ;  SE 处理程序安装
00401427   . 64:A1 0000000>mov eax,dword ptr fs:[0]                 ;  关键代码
0040142D   . 50            push eax
0040142E   . 64:8925 00000>mov dword ptr fs:[0],esp
00401435   . 83EC 0C       sub esp,0xC                              ;  保护现场
00401438   . 56            push esi
00401439   . 57            push edi
0040143A   . 8BF9          mov edi,ecx
0040143C   .  6A01         push 0x1
0040143E   .  E8FD3E0200   call CrackMe.00425340                    ;  读字符串给edx
00401443   .  6A00         push 0x0
00401445   . 8D4F 5C       lea ecx,dword ptrds:[edi+0x5C]
00401448   .  E895110200   call CrackMe.004225E2                    ;  读输入字符串给eax
0040144D   . 51            push ecx
0040144E   . 

本文标签: writeup