TOOLS USED : W32Dasm, Soft-Ice, Hexeditor
DIFFICULTY : 1/10
Load the crackme in Wdasm, soon we find the call with the serial calculation
:
00401523 68A8504100 push 004150A8
* Referenced by a (U)nconditional or (C)onditional Jump at Address:004014B2(C)
00401528 E857360000 call 00404B84
0040152D 83C410 add esp, 00000010
00401530 E803000000 call 00401538 ;Serial routine
00401535 C9 leave
00401536 C3 ret
Serial Routine :
---------------
00401538 55 push ebp
00401539 89E5 mov ebp, esp
0040153B 81EC98040000 sub esp, 00000498
00401541 A000604100 mov al, byte ptr [00416000]
00401546 8845FF mov byte ptr [ebp-01], al
00401549 A001604100 mov al, byte ptr [00416001]
0040154E 8845FE mov byte ptr [ebp-02], al
00401551 A002604100 mov al, byte ptr [00416002]
...
very long, but very easy algorithm
...
004041CC 89D0 mov eax, edx
004041CE 034594 add eax, dword ptr [ebp-6C]
004041D1 89C2 mov edx, eax
004041D3 035590 add edx, dword ptr [ebp-70]
004041D6 8B458C mov eax, dword ptr [ebp-74]
004041D9 01D0 add eax, edx
004041DB A314604100 mov dword ptr [00416014], eax
004041E0 E803000000 call 004041E8 ; correct-serial routine
004041E5 C9 leave
004041E6 C3 ret
As you noticed I skipped the very long algo, it's very easy to understand.
It checks every letter for it's value and does a simple calculation accordingly.
Everybody should notice that only lower cases are processed ! What does
that mean? If we enter our name in capitals, the serial will always be
the same (when the name has the same length). Let's check this out..:
DETTEN = 8263
XXXXX = 8263 too :-)
MUTTEN = 8263 :-)
Point proven ! No need to write a keygen, just enter your name in capital!
But we will make an internal keygen anyway :-)
Correct-Serial Routine :
------------------------
004041E8 55 push ebp
004041E9 89E5 mov ebp, esp
004041EB 83EC08 sub esp, 00000008
004041EE A118604100 mov eax, dword ptr [00416018] ; your serial
004041F3 3B0514604100 cmp eax, dword ptr [00416014] ; correct serial
004041F9 7507 jne 00404202 ; If not correct, badguy
004041FB E830000000 call 00404230 ; Goodguy message
00404200 EB12 jmp 00404214 ; Leave
* Referenced by a (U)nconditional or (C)onditional Jump at Address: 004041F9(C)
00404202 A118604100 mov eax, dword ptr [00416018]
00404207 3B0514604100 cmp eax, dword ptr [00416014] ; check again
0040420D 7405 je 00404214 ; if correct, leave
0040420F E850000000 call 00404264 ; Badguy message routine
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses: 00404200(U), 0040420D(C)
00404214 C9 leave
00404215 C3 ret
Check address 416014 to know the correct serial for your name. eg Detten
: 8968
So now you know your serial, the only thing left to do is keygen it...
|