新CrackMe160之006 - AD_CM#2

汇编写的,代码很少直接看

00401000 >/$  6A 00         push 0x0                                 ; /pModule = NULL
00401002  |.  E8 A1010000   call <jmp.&KERNEL32.GetModuleHandleA>    ; \GetModuleHandleA
00401007  |.  A3 78304000   mov dword ptr ds:[0x403078],eax
0040100C  |.  6A 00         push 0x0                                 ; /lParam = NULL
0040100E  |.  68 2B104000   push AD_CM#2.0040102B                    ; |DlgProc = AD_CM#2.0040102B
00401013  |.  6A 00         push 0x0                                 ; |hOwner = NULL
00401015  |.  68 00304000   push AD_CM#2.00403000                    ; |pTemplate = "ADDialog"
0040101A  |.  FF35 78304000 push dword ptr ds:[0x403078]             ; |hInst = NULL
00401020  |.  E8 53010000   call <jmp.&USER32.DialogBoxParamA>       ; \DialogBoxParamA
00401025  |.  50            push eax                                 ; /ExitCode = 0x19FFCC
00401026  \.  E8 77010000   call <jmp.&KERNEL32.ExitProcess>         ; \ExitProcess
0040102B  /.  55            push ebp
0040102C  |.  8BEC          mov ebp,esp
0040102E  |.  817D 0C 10010>cmp [arg.2],0x110
00401035  |.  75 18         jnz short AD_CM#2.0040104F
00401037  |.  68 B80B0000   push 0xBB8                               ; /ControlID = BB8 (3000.)
0040103C  |.  FF75 08       push [arg.1]                             ; |hWnd = 003BF000
0040103F  |.  E8 40010000   call <jmp.&USER32.GetDlgItem>            ; \GetDlgItem
00401044  |.  50            push eax                                 ; /hWnd = 0019FFCC
00401045  |.  E8 52010000   call <jmp.&USER32.SetFocus>              ; \SetFocus
0040104A  |.  E9 A4000000   jmp AD_CM#2.004010F3
0040104F  |>  837D 0C 10    cmp [arg.2],0x10
00401053  |.  75 19         jnz short AD_CM#2.0040106E
00401055  |.  6A 00         push 0x0                                 ; /lParam = 0x0
00401057  |.  68 037D0000   push 0x7D03                              ; |wParam = 0x7D03
0040105C  |.  68 11010000   push 0x111                               ; |Message = WM_COMMAND
00401061  |.  FF75 08       push [arg.1]                             ; |hWnd = 0x3BF000
00401064  |.  E8 2D010000   call <jmp.&USER32.SendMessageA>          ; \SendMessageA
00401069  |.  E9 85000000   jmp AD_CM#2.004010F3
0040106E  |>  817D 0C 11010>cmp [arg.2],0x111
00401075  |.  75 73         jnz short AD_CM#2.004010EA
00401077  |.  8B45 10       mov eax,[arg.3]
0040107A  |.  837D 14 00    cmp [arg.4],0x0
0040107E  |.  75 12         jnz short AD_CM#2.00401092
00401080  |.  66:3D 037D    cmp ax,0x7D03
00401084  |.  75 6D         jnz short AD_CM#2.004010F3
00401086  |.  6A 00         push 0x0                                 ; /Result = 0x0
00401088  |.  FF75 08       push [arg.1]                             ; |hWnd = 003BF000
0040108B  |.  E8 EE000000   call <jmp.&USER32.EndDialog>             ; \EndDialog
00401090  |.  EB 61         jmp short AD_CM#2.004010F3
00401092  |>  8B55 10       mov edx,[arg.3]
00401095  |.  C1EA 10       shr edx,0x10
00401098  |.  66:0BD2       or dx,dx
0040109B  |.  75 4B         jnz short AD_CM#2.004010E8
0040109D  |.  66:3D BA0B    cmp ax,0xBBA
004010A1  |.  75 0A         jnz short AD_CM#2.004010AD
004010A3  |.  FF75 08       push [arg.1]
004010A6  |.  E8 51000000   call AD_CM#2.004010FC
004010AB  |.  EB 3B         jmp short AD_CM#2.004010E8
004010AD  |>  66:3D BE0B    cmp ax,0xBBE
004010B1  |.  75 1B         jnz short AD_CM#2.004010CE
004010B3  |.  6A 00         push 0x0                                 ; /lParam = NULL
004010B5  |.  68 2B104000   push AD_CM#2.0040102B                    ; |DlgProc = AD_CM#2.0040102B
004010BA  |.  6A 00         push 0x0                                 ; |hOwner = NULL
004010BC  |.  68 09304000   push AD_CM#2.00403009                    ; |pTemplate = "AboutDlg"
004010C1  |.  FF35 78304000 push dword ptr ds:[0x403078]             ; |hInst = NULL
004010C7  |.  E8 AC000000   call <jmp.&USER32.DialogBoxParamA>       ; \DialogBoxParamA
004010CC  |.  EB 1A         jmp short AD_CM#2.004010E8
004010CE  |>  66:3D BB0B    cmp ax,0xBBB
004010D2  |.  75 14         jnz short AD_CM#2.004010E8
004010D4  |.  6A 00         push 0x0                                 ; /lParam = 0x0
004010D6  |.  68 037D0000   push 0x7D03                              ; |wParam = 0x7D03
004010DB  |.  68 11010000   push 0x111                               ; |Message = WM_COMMAND
004010E0  |.  FF75 08       push [arg.1]                             ; |hWnd = 0x3BF000
004010E3  |.  E8 AE000000   call <jmp.&USER32.SendMessageA>          ; \SendMessageA
004010E8  |>  EB 09         jmp short AD_CM#2.004010F3
004010EA  |>  B8 00000000   mov eax,0x0
004010EF  |.  C9            leave
004010F0  |.  C2 1000       retn 0x10
004010F3  |>  B8 01000000   mov eax,0x1
004010F8  |.  C9            leave
004010F9  \.  C2 1000       retn 0x10
004010FC  /$  55            push ebp
004010FD  |.  8BEC          mov ebp,esp
004010FF  |.  6A 14         push 0x14                                ; /Count = 14 (20.)
00401101  |.  68 80304000   push AD_CM#2.00403080                    ; |Buffer = AD_CM#2.00403080
00401106  |.  68 B80B0000   push 0xBB8                               ; |ControlID = BB8 (3000.)
0040110B  |.  FF75 08       push [arg.1]                             ; |hWnd = 003BF000
0040110E  |.  E8 77000000   call <jmp.&USER32.GetDlgItemTextA>       ; \GetDlgItemTextA
00401113  |.  8BF0          mov esi,eax
00401115  |.  8D01          lea eax,dword ptr ds:[ecx]
00401117  |.  83FE 05       cmp esi,0x5
0040111A  |.  7D 18         jge short AD_CM#2.00401134
0040111C  |.  6A 40         push 0x40                                ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
0040111E  |.  68 12304000   push AD_CM#2.00403012                    ; |Title = "ArturDents CrackMe#2"
00401123  |.  68 44304000   push AD_CM#2.00403044                    ; |Text = "Your name must be at least five characters long!"
00401128  |.  FF75 08       push [arg.1]                             ; |hOwner = 003BF000
0040112B  |.  E8 60000000   call <jmp.&USER32.MessageBoxA>           ; \MessageBoxA
00401130  |.  33C0          xor eax,eax
00401132  |.  EB 40         jmp short AD_CM#2.00401174
00401134  |>  6A 14         push 0x14                                ; /Count = 14 (20.)
00401136  |.  68 80324000   push AD_CM#2.00403280                    ; |Buffer = AD_CM#2.00403280
0040113B  |.  68 B90B0000   push 0xBB9                               ; |ControlID = BB9 (3001.)
00401140  |.  FF75 08       push [arg.1]                             ; |hWnd = 003BF000
00401143  |.  E8 42000000   call <jmp.&USER32.GetDlgItemTextA>       ; \GetDlgItemTextA
00401148  |.  B8 80304000   mov eax,AD_CM#2.00403080
0040114D  |.  BB 80324000   mov ebx,AD_CM#2.00403280
00401152  |.  8BCE          mov ecx,esi                              ;  AD_CM#2.<ModuleEntryPoint>
00401154  |>  8A10          /mov dl,byte ptr ds:[eax]
00401156  |.  2AD1          |sub dl,cl
00401158  |.  3813          |cmp byte ptr ds:[ebx],dl
0040115A  |.  75 18         |jnz short AD_CM#2.00401174
0040115C  |.  40            |inc eax
0040115D  |.  43            |inc ebx
0040115E  |.^ E2 F4         \loopd short AD_CM#2.00401154
00401160  |.  6A 40         push 0x40                                ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
00401162  |.  68 12304000   push AD_CM#2.00403012                    ; |Title = "ArturDents CrackMe#2"
00401167  |.  68 27304000   push AD_CM#2.00403027                    ; |Text = "Yeah, you did it!"
0040116C  |.  FF75 08       push [arg.1]                             ; |hOwner = 003BF000
0040116F  |.  E8 1C000000   call <jmp.&USER32.MessageBoxA>           ; \MessageBoxA
00401174  |>  C9            leave
00401175  \.  C2 0400       retn 0x4
00401178   $- FF25 20204000 jmp dword ptr ds:[<&USER32.DialogBoxPara>;  user32.DialogBoxParamA
0040117E   $- FF25 18204000 jmp dword ptr ds:[<&USER32.EndDialog>]   ;  user32.EndDialog
00401184   $- FF25 10204000 jmp dword ptr ds:[<&USER32.GetDlgItem>]  ;  user32.GetDlgItem
0040118A   $- FF25 0C204000 jmp dword ptr ds:[<&USER32.GetDlgItemTex>;  user32.GetDlgItemTextA
00401190   $- FF25 1C204000 jmp dword ptr ds:[<&USER32.MessageBoxA>] ;  user32.MessageBoxA
00401196   $- FF25 24204000 jmp dword ptr ds:[<&USER32.SendMessageA>>;  user32.SendMessageA
0040119C   $- FF25 14204000 jmp dword ptr ds:[<&USER32.SetFocus>]    ;  user32.SetFocus
004011A2   .- FF25 04204000 jmp dword ptr ds:[<&KERNEL32.ExitProcess>;  kernel32.ExitProcess
004011A8   $- FF25 00204000 jmp dword ptr ds:[<&KERNEL32.GetModuleHa>;  kernel32.GetModuleHandleA
004011AE      00            db 00
004011AF      00            db 00

后面到00401FFF都是0了, 可以看到后面几行就关键方法跳转,再上一点就是关键算法了,
用户名每一位减去用户名剩余长度是否等于系列号 user[i] - (ulen-i) ?== serl[i]
如:
用户名为:56789
系列号则:02468

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

 
 
 

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

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

posted @ 2024-12-09 16:58  hankerstudio  阅读(24)  评论(0)    收藏  举报