004038D0 /$ 53 PUSH EBX
004038D1 |. 56 PUSH ESI
004038D2 |. 57 PUSH EDI ;保护寄存器
004038D3 |. 89C6 MOV ESI,EAX ; 装入我们输入的序列号地址
004038D5 |. 89D7 MOV EDI,EDX ; 装入正确序列号地址
004038D7 |. 39D0 CMP EAX,EDX ; 为什么要比对这两个不可能相等的地址?
004038D9 |. 0F84 8F000000 JE CRACK1.0040396E
004038DF |. 85F6 TEST ESI,ESI
004038E1 |. 74 68 JE SHORT CRACK1.0040394B
004038E3 |. 85FF TEST EDI,EDI ; 两个TEST测试字符串是否空, 为何连自己设置的编码也要检查?
004038E5 |. 74 6B JE SHORT CRACK1.00403952
004038E7 |. 8B46 FC MOV EAX,DWORD PTR DS:[ESI-4] ; 序列号地址-4的位置是序列长度
004038EA |. 8B57 FC MOV EDX,DWORD PTR DS:[EDI-4] ; 同上
004038ED |. 29D0 SUB EAX,EDX
004038EF |. 77 02 JA SHORT CRACK1.004038F3
004038F1 |. 01C2 ADD EDX,EAX
004038F3 |> 52 PUSH EDX ; 相当于min函数, 最终EDX会是比较小的那个
004038F4 |. C1EA 02 SHR EDX,2 ; EDX
/4
, 之后要以4个字符为单位比较
004038F7 |. 74 26 JE SHORT CRACK1.0040391F ; 不足四则跳不知道跳哪里
004038F9 |> 8B0E
/MOV
ECX,DWORD PTR DS:[ESI]
004038FB |. 8B1F |MOV EBX,DWORD PTR DS:[EDI] ; 装入两个编码的前四字节
004038FD |. 39D9 |CMP ECX,EBX ;比较
004038FF |. 75 58 |JNZ SHORT CRACK1.00403959
00403901 |. 4A |DEC EDX ; 减去1, 其实是减去四个字节
00403902 |. 74 15 |JE SHORT CRACK1.00403919 ; 空了跳
00403904 |. 8B4E 04 |MOV ECX,DWORD PTR DS:[ESI+4]
00403907 |. 8B5F 04 |MOV EBX,DWORD PTR DS:[EDI+4]
0040390A |. 39D9 |CMP ECX,EBX ;这三句再比较四个字节
0040390C |. 75 4B |JNZ SHORT CRACK1.00403959
0040390E |. 83C6 08 |ADD ESI,8
00403911 |. 83C7 08 |ADD EDI,8 ;移动指针
00403914 |. 4A |DEC EDX
00403915 |.^ 75 E2 \JNZ SHORT CRACK1.004038F9
; 这一段是比较硬编码的, 每次比较8个字节
剩下这些东西各种跳转完全不知所以然…
00403917 |. EB 06 JMP SHORT CRACK1.0040391F
00403919 |> 83C6 04 ADD ESI,4
0040391C |. 83C7 04 ADD EDI,4
0040391F |> 5A POP EDX
00403920 |. 83E2 03 AND EDX,3
00403923 |. 74 22 JE SHORT CRACK1.00403947
00403925 |. 8B0E MOV ECX,DWORD PTR DS:[ESI]
00403927 |. 8B1F MOV EBX,DWORD PTR DS:[EDI]
00403929 |. 38D9 CMP CL,BL
0040392B |. 75 41 JNZ SHORT CRACK1.0040396E
0040392D |. 4A DEC EDX
0040392E |. 74 17 JE SHORT CRACK1.00403947
00403930 |. 38FD CMP CH,BH
00403932 |. 75 3A JNZ SHORT CRACK1.0040396E
00403934 |. 4A DEC EDX
00403935 |. 74 10 JE SHORT CRACK1.00403947
00403937 |. 81E3 0000FF00 AND EBX,0FF0000
0040393D |. 81E1 0000FF00 AND ECX,0FF0000
00403943 |. 39D9 CMP ECX,EBX
00403945 |. 75 27 JNZ SHORT CRACK1.0040396E
00403947 |> 01C0 ADD EAX,EAX
00403949 |. EB 23 JMP SHORT CRACK1.0040396E
0040394B |> 8B57 FC MOV EDX,DWORD PTR DS:[EDI-4]
0040394E |. 29D0 SUB EAX,EDX
00403950 |. EB 1C JMP SHORT CRACK1.0040396E
00403952 |> 8B46 FC MOV EAX,DWORD PTR DS:[ESI-4]
00403955 |. 29D0 SUB EAX,EDX
00403957 |. EB 15 JMP SHORT CRACK1.0040396E
00403959 |> 5A POP EDX
0040395A |. 38D9 CMP CL,BL
0040395C |. 75 10 JNZ SHORT CRACK1.0040396E
0040395E |. 38FD CMP CH,BH
00403960 |. 75 0C JNZ SHORT CRACK1.0040396E
00403962 |. C1E9 10 SHR ECX,10
00403965 |. C1EB 10 SHR EBX,10
00403968 |. 38D9 CMP CL,BL
0040396A |. 75 02 JNZ SHORT CRACK1.0040396E
0040396C |. 38FD CMP CH,BH
0040396E |> 5F POP EDI ;直接跳到这里就Thank you mate it 了.
0040396F |. 5E POP ESI
00403970 |. 5B POP EBX
00403971 \. C3 RETN