新CrackMe160之032 - Crackme2

  1. 脱壳
    使用ESP定律脱壳方式2直接成功

  2. 破解
    汇编的代码直接看源码

00401000 >  6A 00           push 0x0
00401002    E8 23040000     call <jmp.&kernel32.GetModuleHandleA>
00401007    A3 F0344000     mov dword ptr ds:[0x4034F0],eax
0040100C    50              push eax
0040100D    E8 13000000     call Crackme2.00401025
00401012    6A 00           push 0x0
00401014    E8 0B040000     call <jmp.&kernel32.ExitProcess>
00401019    6A 00           push 0x0
0040101B    E8 0A040000     call <jmp.&kernel32.GetModuleHandleA>
00401020    A3 F0344000     mov dword ptr ds:[0x4034F0],eax
00401025    55              push ebp
00401026    8BEC            mov ebp,esp
00401028    83C4 B0         add esp,-0x50
0040102B    6A 64           push 0x64
0040102D    FF35 F0344000   push dword ptr ds:[0x4034F0]
00401033    E8 B0030000     call <jmp.&user32.LoadIconA>
00401038    8945 E8         mov dword ptr ss:[ebp-0x18],eax
0040103B    C745 D0 3000000>mov dword ptr ss:[ebp-0x30],0x30
00401042    C745 D4 0300000>mov dword ptr ss:[ebp-0x2C],0x3
00401049    C745 D8 E211400>mov dword ptr ss:[ebp-0x28],Crackme2.004>
00401050    C745 DC 0000000>mov dword ptr ss:[ebp-0x24],0x0
00401057    C745 E0 1E00000>mov dword ptr ss:[ebp-0x20],0x1E
0040105E    FF75 08         push dword ptr ss:[ebp+0x8]
00401061    8F45 E4         pop dword ptr ss:[ebp-0x1C]              ; kernel32.7571FCC9
00401064    C745 F0 0500000>mov dword ptr ss:[ebp-0x10],0x5
0040106B    C745 F4 0000000>mov dword ptr ss:[ebp-0xC],0x0
00401072    C745 F8 2C30400>mov dword ptr ss:[ebp-0x8],Crackme2.0040>; ASCII "Bengaly"
00401079    6A 64           push 0x64
0040107B    FF35 F0344000   push dword ptr ds:[0x4034F0]
00401081    E8 62030000     call <jmp.&user32.LoadIconA>
00401086    8945 E8         mov dword ptr ss:[ebp-0x18],eax
00401089    8945 FC         mov dword ptr ss:[ebp-0x4],eax
0040108C    68 007F0000     push 0x7F00
00401091    6A 00           push 0x0
00401093    E8 4A030000     call <jmp.&user32.LoadCursorA>
00401098    8945 EC         mov dword ptr ss:[ebp-0x14],eax
0040109B    8D45 D0         lea eax,dword ptr ss:[ebp-0x30]
0040109E    50              push eax
0040109F    E8 56030000     call <jmp.&user32.RegisterClassExA>
004010A4    6A 00           push 0x0
004010A6    6A 00           push 0x0
004010A8    6A 00           push 0x0
004010AA    68 21304000     push Crackme2.00403021                   ; ASCII "MainWindow"
004010AF    FF35 F0344000   push dword ptr ds:[0x4034F0]
004010B5    E8 F8020000     call <jmp.&user32.CreateDialogParamA>
004010BA    8945 B0         mov dword ptr ss:[ebp-0x50],eax
004010BD    68 C8000000     push 0xC8
004010C2    FF75 08         push dword ptr ss:[ebp+0x8]
004010C5    E8 12030000     call <jmp.&user32.LoadBitmapA>
004010CA    A3 F4344000     mov dword ptr ds:[0x4034F4],eax
004010CF    6A 6C           push 0x6C
004010D1    FF75 B0         push dword ptr ss:[ebp-0x50]
004010D4    E8 EB020000     call <jmp.&user32.GetDlgItem>
004010D9    FF35 F4344000   push dword ptr ds:[0x4034F4]
004010DF    6A 00           push 0x0
004010E1    68 F7000000     push 0xF7
004010E6    50              push eax
004010E7    E8 1A030000     call <jmp.&user32.SendMessageA>
004010EC    68 2C010000     push 0x12C
004010F1    FF75 08         push dword ptr ss:[ebp+0x8]
004010F4    E8 E3020000     call <jmp.&user32.LoadBitmapA>
004010F9    A3 F4344000     mov dword ptr ds:[0x4034F4],eax
004010FE    6A 70           push 0x70
00401100    FF75 B0         push dword ptr ss:[ebp-0x50]
00401103    E8 BC020000     call <jmp.&user32.GetDlgItem>
00401108    FF35 F4344000   push dword ptr ds:[0x4034F4]
0040110E    6A 00           push 0x0
00401110    68 F7000000     push 0xF7
00401115    50              push eax
00401116    E8 EB020000     call <jmp.&user32.SendMessageA>
0040111B    68 90010000     push 0x190
00401120    FF75 08         push dword ptr ss:[ebp+0x8]
00401123    E8 B4020000     call <jmp.&user32.LoadBitmapA>
00401128    A3 F4344000     mov dword ptr ds:[0x4034F4],eax
0040112D    6A 6D           push 0x6D
0040112F    FF75 B0         push dword ptr ss:[ebp-0x50]
00401132    E8 8D020000     call <jmp.&user32.GetDlgItem>
00401137    FF35 F4344000   push dword ptr ds:[0x4034F4]
0040113D    6A 00           push 0x0
0040113F    68 F7000000     push 0xF7
00401144    50              push eax
00401145    E8 BC020000     call <jmp.&user32.SendMessageA>
0040114A    68 F4010000     push 0x1F4
0040114F    FF75 08         push dword ptr ss:[ebp+0x8]
00401152    E8 85020000     call <jmp.&user32.LoadBitmapA>
00401157    A3 F4344000     mov dword ptr ds:[0x4034F4],eax
0040115C    6A 71           push 0x71
0040115E    FF75 B0         push dword ptr ss:[ebp-0x50]
00401161    E8 5E020000     call <jmp.&user32.GetDlgItem>
00401166    FF35 F4344000   push dword ptr ds:[0x4034F4]
0040116C    6A 00           push 0x0
0040116E    68 F7000000     push 0xF7
00401173    50              push eax
00401174    E8 8D020000     call <jmp.&user32.SendMessageA>
00401179    68 DC344000     push Crackme2.004034DC                   ; ASCII " Key/CrackmMe - #2"
0040117E    FF75 B0         push dword ptr ss:[ebp-0x50]
00401181    E8 86020000     call <jmp.&user32.SetWindowTextA>
00401186    FF75 B0         push dword ptr ss:[ebp-0x50]
00401189    E8 90020000     call <jmp.&user32.UpdateWindow>
0040118E    6A 00           push 0x0
00401190    6A 00           push 0x0
00401192    6A 00           push 0x0
00401194    8D45 B4         lea eax,dword ptr ss:[ebp-0x4C]
00401197    50              push eax
00401198    E8 33020000     call <jmp.&user32.GetMessageA>
0040119D    0BC0            or eax,eax
0040119F    74 3A           je short Crackme2.004011DB
004011A1    8D45 B4         lea eax,dword ptr ss:[ebp-0x4C]
004011A4    50              push eax
004011A5    FF75 B0         push dword ptr ss:[ebp-0x50]
004011A8    E8 29020000     call <jmp.&user32.IsDialogMessage>
004011AD    0BC0            or eax,eax
004011AF    75 28           jnz short Crackme2.004011D9
004011B1    8D45 B4         lea eax,dword ptr ss:[ebp-0x4C]
004011B4    50              push eax
004011B5    E8 5E020000     call <jmp.&user32.TranslateMessage>
004011BA    8D45 B4         lea eax,dword ptr ss:[ebp-0x4C]
004011BD    50              push eax
004011BE    E8 FB010000     call <jmp.&user32.DispatchMessageA>
004011C3    FF35 F4344000   push dword ptr ds:[0x4034F4]
004011C9    E8 68020000     call <jmp.&gdi32.DeleteObject>
004011CE    FF35 F4344000   push dword ptr ds:[0x4034F4]
004011D4    E8 5D020000     call <jmp.&gdi32.DeleteObject>
004011D9  ^ EB B3           jmp short Crackme2.0040118E
004011DB    8B45 BC         mov eax,dword ptr ss:[ebp-0x44]
004011DE    C9              leave
004011DF    C2 0400         retn 0x4
004011E2    55              push ebp
004011E3    8BEC            mov ebp,esp
004011E5    837D 0C 02      cmp dword ptr ss:[ebp+0xC],0x2
004011E9    75 09           jnz short Crackme2.004011F4
004011EB    6A 00           push 0x0
004011ED    E8 02020000     call <jmp.&user32.PostQuitMessage>
004011F2    EB 42           jmp short Crackme2.00401236
004011F4    817D 0C 0102000>cmp dword ptr ss:[ebp+0xC],0x201
004011FB    75 18           jnz short Crackme2.00401215
004011FD    E8 FE010000     call <jmp.&user32.ReleaseCapture>
00401202    6A 00           push 0x0
00401204    6A 02           push 0x2
00401206    68 A1000000     push 0xA1
0040120B    FF75 08         push dword ptr ss:[ebp+0x8]
0040120E    E8 F3010000     call <jmp.&user32.SendMessageA>
00401213    EB 21           jmp short Crackme2.00401236
00401215    817D 0C 1101000>cmp dword ptr ss:[ebp+0xC],0x111
0040121C    75 18           jnz short Crackme2.00401236
0040121E    8B45 10         mov eax,dword ptr ss:[ebp+0x10]
00401221    50              push eax
00401222    C1E8 10         shr eax,0x10
00401225    0BC0            or eax,eax
00401227    75 0D           jnz short Crackme2.00401236
00401229    58              pop eax                                  ; kernel32.7571FCC9
0040122A    83F8 6D         cmp eax,0x6D
0040122D    75 07           jnz short Crackme2.00401236
0040122F    6A 00           push 0x0
00401231    E8 EE010000     call <jmp.&kernel32.ExitProcess>
00401236    817D 0C 1101000>cmp dword ptr ss:[ebp+0xC],0x111
0040123D    75 1B           jnz short Crackme2.0040125A
0040123F    8B45 10         mov eax,dword ptr ss:[ebp+0x10]
00401242    50              push eax
00401243    C1E8 10         shr eax,0x10
00401246    0BC0            or eax,eax
00401248    75 10           jnz short Crackme2.0040125A
0040124A    58              pop eax                                  ; kernel32.7571FCC9
0040124B    83F8 71         cmp eax,0x71
0040124E    75 0A           jnz short Crackme2.0040125A
00401250    6A 06           push 0x6
00401252    FF75 08         push dword ptr ss:[ebp+0x8]
00401255    E8 B8010000     call <jmp.&user32.ShowWindow>
0040125A    817D 0C 1101000>cmp dword ptr ss:[ebp+0xC],0x111
00401261    0F85 01010000   jnz Crackme2.00401368
00401267    8B45 10         mov eax,dword ptr ss:[ebp+0x10]
0040126A    50              push eax
0040126B    C1E8 10         shr eax,0x10
0040126E    0BC0            or eax,eax
00401270    75 19           jnz short Crackme2.0040128B
00401272    58              pop eax                                  ; kernel32.7571FCC9
00401273    83F8 70         cmp eax,0x70
00401276    75 13           jnz short Crackme2.0040128B
00401278    6A 00           push 0x0
0040127A    68 62344000     push Crackme2.00403462                   ; ASCII "Key/CrackMe #2   "
0040127F    68 3C324000     push Crackme2.0040323C                   ; ASCII "   +=================================+\r\n   |  Key/CrackMe - 2 Created on 21/9/2001  | \r\n   +========"
00401284    6A 00           push 0x0
00401286    E8 63010000     call <jmp.&user32.MessageBoxA>
0040128B    817D 0C 1101000>cmp dword ptr ss:[ebp+0xC],0x111
00401292    0F85 E5000000   jnz Crackme2.0040137D
00401298    8B45 10         mov eax,dword ptr ss:[ebp+0x10]
0040129B    50              push eax
0040129C    C1E8 10         shr eax,0x10
0040129F    0BC0            or eax,eax
004012A1    0F85 BF000000   jnz Crackme2.00401366
004012A7    58              pop eax                                  ; kernel32.7571FCC9
004012A8    83F8 6C         cmp eax,0x6C
004012AB    0F85 B5000000   jnz Crackme2.00401366
004012B1    6A 40           push 0x40
004012B3    68 38304000     push Crackme2.00403038
004012B8    6A 6A           push 0x6A
004012BA    FF75 08         push dword ptr ss:[ebp+0x8]
004012BD    E8 08010000     call <jmp.&user32.GetDlgItemTextA>
004012C2    83F8 00         cmp eax,0x0
004012C5    74 18           je short Crackme2.004012DF
004012C7    6A 40           push 0x40
004012C9    68 38314000     push Crackme2.00403138
004012CE    6A 6B           push 0x6B
004012D0    FF75 08         push dword ptr ss:[ebp+0x8]
004012D3    E8 F2000000     call <jmp.&user32.GetDlgItemTextA>
004012D8    83F8 00         cmp eax,0x0
004012DB    74 02           je short Crackme2.004012DF
004012DD    EB 17           jmp short Crackme2.004012F6
004012DF    6A 00           push 0x0
004012E1    68 62344000     push Crackme2.00403462                   ; ASCII "Key/CrackMe #2   "
004012E6    68 00304000     push Crackme2.00403000                   ; ASCII "    Please Fill in 1 more Char!!"
004012EB    6A 00           push 0x0
004012ED    E8 FC000000     call <jmp.&user32.MessageBoxA>
004012F2    C9              leave
004012F3    C2 1000         retn 0x10
004012F6    68 38304000     push Crackme2.00403038
004012FB    E8 30010000     call <jmp.&kernel32.lstrlen>
00401300    33F6            xor esi,esi                              ; Crackme2.<ModuleEntryPoint>
00401302    8BC8            mov ecx,eax
00401304    B8 01000000     mov eax,0x1
00401309    8B15 38304000   mov edx,dword ptr ds:[0x403038]
0040130F    8A90 37304000   mov dl,byte ptr ds:[eax+0x403037]
00401315    81E2 FF000000   and edx,0xFF
0040131B    8BDA            mov ebx,edx                              ; Crackme2.<ModuleEntryPoint>
0040131D    0FAFDA          imul ebx,edx                             ; Crackme2.<ModuleEntryPoint>
00401320    03F3            add esi,ebx
00401322    8BDA            mov ebx,edx                              ; Crackme2.<ModuleEntryPoint>
00401324    D1FB            sar ebx,1
00401326    03F3            add esi,ebx
00401328    2BF2            sub esi,edx                              ; Crackme2.<ModuleEntryPoint>
0040132A    40              inc eax
0040132B    49              dec ecx                                  ; Crackme2.<ModuleEntryPoint>
0040132C  ^ 75 DB           jnz short Crackme2.00401309
0040132E    56              push esi                                 ; Crackme2.<ModuleEntryPoint>
0040132F    68 38314000     push Crackme2.00403138
00401334    E8 4A000000     call Crackme2.00401383
00401339    5E              pop esi                                  ; kernel32.7571FCC9
0040133A    3BC6            cmp eax,esi                              ; Crackme2.<ModuleEntryPoint>
0040133C    75 15           jnz short Crackme2.00401353
0040133E    6A 00           push 0x0
00401340    68 62344000     push Crackme2.00403462                   ; ASCII "Key/CrackMe #2   "
00401345    68 B8344000     push Crackme2.004034B8                   ; ASCII " Good Job, I Wish You the Very Best"
0040134A    6A 00           push 0x0
0040134C    E8 9D000000     call <jmp.&user32.MessageBoxA>
00401351    EB 13           jmp short Crackme2.00401366
00401353    6A 00           push 0x0
00401355    68 62344000     push Crackme2.00403462                   ; ASCII "Key/CrackMe #2   "
0040135A    68 86344000     push Crackme2.00403486                   ; ASCII " You Have Enter A Wrong Serial, Please Try Again "
0040135F    6A 00           push 0x0
00401361    E8 88000000     call <jmp.&user32.MessageBoxA>
00401366    EB 15           jmp short Crackme2.0040137D
00401368    FF75 14         push dword ptr ss:[ebp+0x14]
0040136B    FF75 10         push dword ptr ss:[ebp+0x10]
0040136E    FF75 0C         push dword ptr ss:[ebp+0xC]
00401371    FF75 08         push dword ptr ss:[ebp+0x8]
00401374    E8 3F000000     call <jmp.&ntdll.NtdllDefWindowProc_A>
00401379    C9              leave
0040137A    C2 1000         retn 0x10
0040137D    33C0            xor eax,eax
0040137F    C9              leave
00401380    C2 1000         retn 0x10
00401383    55              push ebp
00401384    8BEC            mov ebp,esp
00401386    FF75 08         push dword ptr ss:[ebp+0x8]
00401389    E8 A2000000     call <jmp.&kernel32.lstrlen>
0040138E    53              push ebx
0040138F    33DB            xor ebx,ebx
00401391    8BC8            mov ecx,eax
00401393    8B75 08         mov esi,dword ptr ss:[ebp+0x8]
00401396    51              push ecx                                 ; Crackme2.<ModuleEntryPoint>
00401397    33C0            xor eax,eax
00401399    AC              lods byte ptr ds:[esi]
0040139A    83E8 30         sub eax,0x30
0040139D    49              dec ecx                                  ; Crackme2.<ModuleEntryPoint>
0040139E    74 05           je short Crackme2.004013A5
004013A0    6BC0 0A         imul eax,eax,0xA
004013A3  ^ E2 FB           loopd short Crackme2.004013A0
004013A5    03D8            add ebx,eax
004013A7    59              pop ecx                                  ; kernel32.7571FCC9
004013A8  ^ E2 EC           loopd short Crackme2.00401396
004013AA    8BC3            mov eax,ebx
004013AC    5B              pop ebx                                  ; kernel32.7571FCC9
004013AD    C9              leave
004013AE    C2 0400         retn 0x4
004013B1    CC              int3
004013B2  - FF25 60C04300   jmp dword ptr ds:[<&user32.CreateDialogP>; user32.CreateDialogParamA
004013B8  - FF25 58C04300   jmp dword ptr ds:[<&ntdll.NtdllDefWindow>; ntdll.NtdllDefWindowProc_A
004013BE  - FF25 50C04300   jmp dword ptr ds:[<&user32.DispatchMessa>; user32.DispatchMessageA
004013C4  - FF25 4CC04300   jmp dword ptr ds:[<&user32.GetDlgItem>]  ; user32.GetDlgItem
004013CA  - FF25 48C04300   jmp dword ptr ds:[<&user32.GetDlgItemTex>; user32.GetDlgItemTextA
004013D0  - FF25 44C04300   jmp dword ptr ds:[<&user32.GetMessageA>] ; user32.GetMessageA
004013D6  - FF25 18C04300   jmp dword ptr ds:[<&user32.IsDialogMessa>; user32.IsDialogMessageA
004013DC  - FF25 2CC04300   jmp dword ptr ds:[<&user32.LoadBitmapA>] ; user32.LoadBitmapA
004013E2  - FF25 30C04300   jmp dword ptr ds:[<&user32.LoadCursorA>] ; user32.LoadCursorA
004013E8  - FF25 1CC04300   jmp dword ptr ds:[<&user32.LoadIconA>]   ; user32.LoadIconA
004013EE  - FF25 20C04300   jmp dword ptr ds:[<&user32.MessageBoxA>] ; user32.MessageBoxA
004013F4  - FF25 24C04300   jmp dword ptr ds:[<&user32.PostQuitMessa>; user32.PostQuitMessage
004013FA  - FF25 28C04300   jmp dword ptr ds:[<&user32.RegisterClass>; user32.RegisterClassExA
00401400  - FF25 64C04300   jmp dword ptr ds:[<&user32.ReleaseCaptur>; user32.ReleaseCapture
00401406  - FF25 68C04300   jmp dword ptr ds:[<&user32.SendMessageA>>; user32.SendMessageA
0040140C  - FF25 34C04300   jmp dword ptr ds:[<&user32.SetWindowText>; user32.SetWindowTextA
00401412  - FF25 38C04300   jmp dword ptr ds:[<&user32.ShowWindow>]  ; user32.ShowWindow
00401418  - FF25 3CC04300   jmp dword ptr ds:[<&user32.TranslateMess>; user32.TranslateMessage
0040141E  - FF25 40C04300   jmp dword ptr ds:[<&user32.UpdateWindow>>; user32.UpdateWindow
00401424  - FF25 10C04300   jmp dword ptr ds:[<&kernel32.ExitProcess>; kernel32.ExitProcess
0040142A  - FF25 0CC04300   jmp dword ptr ds:[<&kernel32.GetModuleHa>; kernel32.GetModuleHandleA
00401430  - FF25 08C04300   jmp dword ptr ds:[<&kernel32.lstrlen>]   ; kernel32.lstrlenA
00401436  - FF25 00C04300   jmp dword ptr ds:[<&gdi32.DeleteObject>] ; gdi32.DeleteObject
0040143C    0000            add byte ptr ds:[eax],al
0040143E    0000            add byte ptr ds:[eax],al

代码量也就300多行, 看一遍就可以发现按钮入口004012F6,下好断点就可以单步看算法了, 看这算法是不是很熟悉,就跟026一样一样的
注册机代码直接复制过来,小调整一个就可以直接用了

#include <stdio.h>
#include <string.h>
int main() {
	char user[21] = {0};
	printf("用户名: ");
	fgets(user, sizeof(user), stdin);
	unsigned int ebx, edx, esi = 0;
	int i, len = strlen(user) - 1; //最后一个\n
	
	for(i=0; i<len; i++){
		edx = user[i];
		ebx = edx * edx;
		esi += ebx;
		ebx = edx >> 1;
		//ebx += 3;   //这里这里
		//ebx *= edx;   //这里这里
		//ebx -= edx;   //这里这里
		esi += ebx;
		esi -= edx;  //这里这里
	}
	printf("系列号: %d\n", esi); //这里这里
	getchar();
	return 0;
}

运行示例:
用户名: abc
系列号: 28666

 
 
本节高手录制的视频,点击前往查看

 
 
 

使用的工具连接(工具有点多有点大,可以先下OD,其它的后面慢慢下) 点击前往下载

下面是我的OD的界面布局,我觉得这4个是最常用的界面,其它的我基本上没用到~
OD界面布局

posted @ 2024-12-10 09:15  hankerstudio  阅读(5)  评论(0)    收藏  举报