This CrackMe has an fairly
easy to crack missing KEY FILE protection. I highly recommend all the Newbies out there to try this
one. They will at least find out that reconstruction a missing key file can sometimes be
really easy - like in this case.
First of all I'd like to tell you that should create an bogous KEY FILE. My KEY
FILE (TC1.KEY) looks like the following:
00000000: 43 52 41 43-4B 45 44 00-42 59 00 54-4F 52 4E 40
00000010: 44
4F 00 5B-54 49 44 5D-00 00 00 00-00 00 00 00
After you've executed the CrackMe, you'll see a nice Try
it button. Press on it. A dialog box get's opend and you have to choose a
file. Now choose TC1.KEY, enter SoftICE and set a BPX to the KEY FILE APIs, CreateFileA and _lopen. Then leave
SoftICE and press the Open button. Now SoftICE will pop up. However as you can see at the bottom of
the SoftICE screen, this code is located in COMDLG32.DLL, the standard dialog function,
where also the FILE DIALOG is
located in. So just leave SoftICE. It will pop up again and the following code
snippet will be displayed after you've pressed F11:
:0040461F CALL KERNEL32!CreateFileA
:00404624 CMP EAX,-01 ; Does file not exist?
:00404627 JZ 00404652 ; if so => JMP
:00404629 MOV [EBX],EAX
:0040462B POP EDI
:0040462C POP ESI
:0040462D POP EBX
:0040462E RET |
Well nothing really
important here, since we've already created our KEY FILE, we should pass that condition.
Press F10 until you pass the RET instruction. Now SoftICE will display the following code
snippet:
:00429D93 CALL 00402618
:00429D98 JMP 00429DB4
:00429D9A LEA EDX,[EBP-01]
:00429D9D LEA EAX,[EBP-0150]
:00429DA3 CALL 004044E8
:00429DA8 CALL 00402618
:00429DAD XOR EAX,EAX
; clear EAX
:00429DAF MOV AL,[EBP-01]
; read char from KEY FILE
:00429DB2 ADD EBX,EAX
; add it to EBX
:00429DB4 LEA EAX,[EBP-0150]
:00429DBA CALL 00404494
:00429DBF CALL 00402618
:00429DC4 TEST AL,AL
; did all chars
:00429DC6 JZ 00429D9A
; if not => JMP
:00429DC8 LEA EAX,[EBP-0150]
:00429DCE CALL 00404458
:00429DD3 CALL 00402618
:00429DD8 CMP EBX,000020A9
; sum of chars = 20A9h
:00429DDE JNZ 00429DEE
; if not => invalid KEY FILE |
Well, as you can see from my
comments in the code snippet above, all what this validation routine does is just checking
if the sum of all chars contained in the KEY FILE is equal to 20A9h. The current sum of my
KEY FILE is 637h.
20A9h - 637h = 1A72h. So I will need to add chars with the sum of 1A72h to make it
registered. I decided to add as less as chars possible. 1A72h is (FF * 1A) + 8C. So I have
to add 26 FF's and one 8C to make it registered. So my KEY FILE looks like the following:
00000000: 43
52 41 43-4B 45 44 00-42 59 00 54-4F 52 4E 40
00000010: 44
4F 00 5B-54 49 44 5D-FF FF FF FF-FF FF FF FF
00000020: FF
FF FF FF-FF FF FF FF-FF FF FF FF-FF FF FF FF
00000030: FF
FF 8C
The smallest possible KEY FILE which does not include your handle, group, ... looks
like the following:
00000000: FF FF FF FF-FF FF FF FF-FF FF FF FF-FF FF FF FF
00000010: FF
FF FF FF-FF FF FF FF-FF FF FF FF-FF FF FF FF
00000020: C9
Now there's only one thing to do:
Send your solutions (Patch or KeyFile) to: bombasticx@gmx.net
If you are one of the ten persons who patched it at first, your name will be added
to the: 'Hall of Fame of sUrRealIzM CrackMez'
BTW, what I still didn't understand is why
just the people who patched it will be added to the HALL OF FAME. Patching a program to
make it registered is nearly always an easy exercise. Often you can patch a program
without even understanding what's going on with your registration details - and in this
case a look at the STRING REFERENCE in W32DASM, some backtracing should work (haven't
checked it). If you still want to patch it, just change the JNZ instruction at 429DDE
in NOPs.
Another target has been Reverse Engineerd. Any questions (no crack requests)?
|