CPU Disasm
Address Hex dump Command Comments
00841870 $ 55 push ebp ; 注册码判断函数3
00841871 . 8BEC mov ebp, esp
00841873 . 83EC 54 sub esp, 54
00841876 . A1 14F08500 mov eax, dword ptr [85F014]
0084187B . 33C5 xor eax, ebp
0084187D . 8945 FC mov dword ptr [ebp-4], eax
00841880 . 53 push ebx
00841881 . 56 push esi
00841882 . 57 push edi
00841883 . 6A 36 push 36 ;
/Arg3
= 36
00841885 . 8D45 B0 lea eax, [ebp-50] ; |
00841888 . 8BD9 mov ebx, ecx ; |
0084188A . 6A 00 push 0 ; |Arg2 = 0
0084188C . 50 push eax ; |Arg1
0084188D . 8BFA mov edi, edx ; |
0084188F . 895D AC mov dword ptr [ebp-54], ebx ; |
00841892 . E8 39210000 call memset ; \Crack_Me.memset
00841897 . 83C4 0C add esp, 0C
0084189A . 8D4D E8 lea ecx, [ebp-18]
0084189D . B8 30000000 mov eax, 30
008418A2 > 66:8901 mov word ptr [ecx], ax
008418A5 . 8D49 02 lea ecx, [ecx+2]
008418A8 . 40 inc eax
008418A9 . 83F8 39
cmp
eax, 39
008418AC .^ 7E F4 jle short 008418A2 ; 初始化字符串0-9
008418AE . B8 61000000 mov eax, 61
008418B3 . 8D4D B0 lea ecx, [ebp-50]
008418B6 > 66:8901 mov word ptr [ecx], ax
008418B9 . 8D49 02 lea ecx, [ecx+2]
008418BC . 40 inc eax
008418BD . 83F8 7A
cmp
eax, 7A
008418C0 .^ 7E F4 jle short 008418B6 ; 初始化字符串a-z
008418C2 . 33D2 xor edx, edx
008418C4 . 8D45 B0 lea eax, [ebp-50]
008418C7 . 66:3955 B0
cmp
word ptr [ebp-50], dx
008418CB . 74 0D je short 008418DA
008418CD . 0F1F00 nop dword ptr [eax]
008418D0 > 8D40 02 lea eax, [eax+2]
008418D3 . 42 inc edx
008418D4 . 66:8338 00
cmp
word ptr [eax], 0
008418D8 .^ 75 F6 jne short 008418D0
008418DA > 33C9 xor ecx, ecx
008418DC . 85D2
test
edx, edx
008418DE . 74 1C je short 008418FC
008418E0 > 0FB7444D B0 movzx eax, word ptr [ecx*2+ebp-50]
008418E5 . 83F8 61
cmp
eax, 61 ; Switch (cases 61..7A, 2 exits)
008418E8 . 72 0D jb short 008418F7
008418EA . 83F8 7A
cmp
eax, 7A
008418ED . 77 08 ja short 008418F7
008418EF . 83C0 E0 add eax, -20 ; Cases 61 (
'a'
), 62 (
'b'
), 63 (
'c'
), 64 (
'd'
), 65 (
008418F2 . 66:89444D B0 mov word ptr [ecx*2+ebp-50], ax
008418F7 > 41 inc ecx ; Default
case
of switch Crack_Me.8418E5
008418F8 . 3BCA
cmp
ecx, edx
008418FA .^ 72 E4 jb short 008418E0 ; 此循环将上面初始化的字符串进行小写转大写操作
008418FC > 33C9 xor ecx, ecx
008418FE . 8BC7 mov eax, edi
00841900 . 85FF
test
edi, edi ; 取出已加密的注册码
00841902 . 74 76 je short 0084197A
00841904 . 66:390F
cmp
word ptr [edi], cx
00841907 . 74 11 je short 0084191A
00841909 . 0F1F80 00000000 nop dword ptr [eax]
00841910 > 8D40 02 lea eax, [eax+2]
00841913 . 41 inc ecx
00841914 . 66:8338 00
cmp
word ptr [eax], 0
00841918 .^ 75 F6 jne short 00841910
0084191A > 33C0 xor eax, eax
0084191C . 85C9
test
ecx, ecx
0084191E . 74 22 je short 00841942
00841920 > 83F8 02
cmp
eax, 2
00841923 . 73 07 jae short 0084192C
00841925 . 66:833447 0F xor word ptr [eax*2+edi], 000F
0084192A . EB 11 jmp short 0084193D
0084192C > 83F8 04
cmp
eax, 4
0084192F . 73 07 jae short 00841938
00841931 . 66:833447 50 xor word ptr [eax*2+edi], 0050
00841936 . EB 05 jmp short 0084193D
00841938 > 66:833447 42 xor word ptr [eax*2+edi], 0042
0084193D > 40 inc eax
0084193E . 3BC1
cmp
eax, ecx
00841940 .^ 72 DE jb short 00841920 ; 对已加密的注册码进行解密操作
00841942 > 33D2 xor edx, edx
00841944 . 8BC7 mov eax, edi
00841946 . 66:3917
cmp
word ptr [edi], dx
00841949 . 74 0F je short 0084195A
0084194B 0F1F4400 00 nop dword ptr [eax+eax]
00841950 > 8D40 02 lea eax, [eax+2]
00841953 . 42 inc edx
00841954 . 66:8338 00
cmp
word ptr [eax], 0
00841958 .^ 75 F6 jne short 00841950
0084195A > 33C9 xor ecx, ecx
0084195C . 85D2
test
edx, edx
0084195E . 74 1A je short 0084197A
00841960 > 0FB7044F movzx eax, word ptr [ecx*2+edi]
00841964 . 83F8 61
cmp
eax, 61 ; Switch (cases 61..7A, 2 exits)
00841967 . 72 0C jb short 00841975
00841969 . 83F8 7A
cmp
eax, 7A
0084196C . 77 07 ja short 00841975
0084196E . 83C0 E0 add eax, -20 ; Cases 61 (
'a'
), 62 (
'b'
), 63 (
'c'
), 64 (
'd'
), 65 (
00841971 . 66:89044F mov word ptr [ecx*2+edi], ax
00841975 > 41 inc ecx ; Default
case
of switch Crack_Me.841964
00841976 . 3BCA
cmp
ecx, edx
00841978 .^ 72 E6 jb short 00841960 ; 对注册码中的字母进行小写转大写操作
0084197A > 33F6 xor esi, esi
0084197C . 0F57C0 xorps xmm0, xmm0
0084197F . 660FD645 F0 movq qword ptr [ebp-10], xmm0
00841984 . 66:8975 F8 mov word ptr [ebp-8], si
00841988 . 66:3937
cmp
word ptr [edi], si
0084198B . 74 48 je short 008419D5
0084198D . 66:8B4D B0 mov cx, word ptr [ebp-50]
00841991 . 8D5D F0 lea ebx, [ebp-10]
00841994 . 8BC7 mov eax, edi
00841996 > 66:85C9
test
cx, cx
00841999 . 74 2C je short 008419C7
0084199B . 0FB710 movzx edx, word ptr [eax]
0084199E . 8D4D B0 lea ecx, [ebp-50]
008419A1 . 33C0 xor eax, eax
008419A3 > 66:3B11
cmp
dx, word ptr [ecx]
008419A6 . 74 10 je short 008419B8
008419A8 . 40 inc eax
008419A9 . 8D4D B0 lea ecx, [ebp-50]
008419AC . 66:833C41 00
cmp
word ptr [eax*2+ecx], 0
008419B1 . 8D0C41 lea ecx, [eax*2+ecx]
008419B4 .^ 75 ED jne short 008419A3
008419B6 . EB 0B jmp short 008419C3
008419B8 > 66:8B4445 B0 mov ax, word ptr [eax*2+ebp-50]
008419BD . 66:8903 mov word ptr [ebx], ax
008419C0 . 83C3 02 add ebx, 2
008419C3 > 66:8B4D B0 mov cx, word ptr [ebp-50]
008419C7 > 46 inc esi
008419C8 . 66:833C77 00
cmp
word ptr [esi*2+edi], 0
008419CD . 8D0477 lea eax, [esi*2+edi]
008419D0 .^ 75 C4 jne short 00841996 ; 此循环取出注册码中的字母部分
008419D2 . 8B5D AC mov ebx, dword ptr [ebp-54]
008419D5 > 33C9 xor ecx, ecx
008419D7 . 8D45 F0 lea eax, [ebp-10]
008419DA . 66:394D F0
cmp
word ptr [ebp-10], cx ; 判断注册码中是否存在字母
008419DE . 74 59 je short 00841A39 ; 注册码中不存在字母则发送注册失败消息
008419E0 > 8D40 02 lea eax, [eax+2]
008419E3 . 41 inc ecx
008419E4 . 66:8338 00
cmp
word ptr [eax], 0
008419E8 .^ 75 F6 jne short 008419E0
008419EA . 83F9 02
cmp
ecx, 2 ; 判断注册码中的字母个数是否等于2
008419ED . 75 4A jne short 00841A39 ; 不相等则发送注册失败消息
008419EF . 33C0 xor eax, eax
008419F1 . C745 F0 31003500 mov dword ptr [ebp-10], 350031
008419F8 . C745 F4 50004200 mov dword ptr [ebp-0C], 420050
008419FF . 8D77 04 lea esi, [edi+4]
00841A02 . 66:8945 F8 mov word ptr [ebp-8], ax
00841A06 . 33C9 xor ecx, ecx
00841A08 0F1F8400 00000000 nop dword ptr [eax+eax]
00841A10 /> 66:8B444D F0
/mov
ax, word ptr [ecx*2+ebp-10]
00841A15 |. 66:3B06 |
cmp
ax, word ptr [esi]
00841A18 |. 75 1F |jne short 00841A39
00841A1A |. 41 |inc ecx
00841A1B |. 83C6 02 |add esi, 2
00841A1E |. 83F9 04 |
cmp
ecx, 4
00841A21 |.^ 72 ED \jb short 00841A10 ; 判断注册码中的3-6位是否依次为
"15PB"
00841A23 |. 8BD7 mov edx, edi
00841A25 |. 8BCB mov ecx, ebx
00841A27 |. E8 14FDFFFF call 00841740 ; <<==调用注册码判断函数4(重要)
00841A2C |. 6A 00 push 0 ; 返回1注册成功
00841A2E |. 85C0
test
eax, eax
00841A30 |. 74 09 jz short 00841A3B
00841A32 |. 68 0B040000 push 40B ; 设置注册成功标志
00841A37 |. EB 07 jmp short 00841A40
00841A39 |> 6A 00 push 0
00841A3B |> 68 0A040000 push 40A ; 设置注册失败标志
00841A40 |> 68 11010000 push 111 ; |Msg = WM_COMMAND
00841A45 |. FF73 04 push dword ptr [ebx+4] ; |hWnd
00841A48 |. FF15 54818500 call dword ptr [<&USER32.PostMess ; \USER32.PostMessageW
00841A4E |. 8B4D FC mov ecx, dword ptr [ebp-4]
00841A51 |. 5F pop edi
00841A52 |. 5E pop esi
00841A53 |. 33CD xor ecx, ebp
00841A55 |. 5B pop ebx
00841A56 |. E8 6A120000 call 00842CC5
00841A5B |. 8BE5 mov esp, ebp
00841A5D |. 5D pop ebp
00841A5E \. C3 ret