home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Reverse Code Engineering RCE CD +sandman 2000
/
ReverseCodeEngineeringRceCdsandman2000.iso
/
RCE
/
E_bliss
/
cm1a_sol.txt
< prev
next >
Wrap
Text File
|
2000-05-25
|
5KB
|
131 lines
Tutorial: Crackme 1a (nOp3x)
By: Sanhedrin
Tools: W32DASM
Softice
This was a fun crackme to do because it forces the cracker to use a little brain
power to get the correct code. So, let's begin.
Startup softice, enter the serial
12344321
and set a breakpoint:
bpx getdlgitemtexta
press OK and once you have broken into softice, disable the breakpoint.
* Reference To: USER32.GetDlgItemTextA, Ord:0000h
|
:0040115D E8E4030000 Call 00401546
:00401162 8D4DF4 lea ecx, dword ptr [ebp-0C]<--- you will land here
:00401165 51 push ecx
:00401166 E811FFFFFF call 0040107C<----call to the serial calculation
:0040116B 59 pop ecx
* Possible Reference to Dialog: DialogID_0001
At 00401166 press F8 to trace into the call function. This will get you to
0040107C.
This crackme takes our serial number and, after a few calculations, compares
it with the actual number. A curve is thrown at us however. Our entered number
is compared to a hardcoded number, and are calulcated with different equations.
The end numbers should be the same for the program to be cracked. Thus, following
code:
* Referenced by a CALL at Address:
|:00401166
|
:0040107C 55 push ebp<----you will land here
:0040107D 8BEC mov ebp, esp
:0040107F 53 push ebx
:00401080 57 push edi
:00401081 8B5D08 mov ebx, dword ptr [ebp+08]
:00401084 53 push ebx
* Reference To: cw3220._atol, Ord:0000h
|
:00401085 E880040000 Call 0040150A
:0040108A 59 pop ecx
:0040108B 8BD0 mov edx, eax
:0040108D B9E7030000 mov ecx, 000003E7
:00401092 81C2495F0E00 add edx, 000E5F49<----add 000E5F49 to our number (12344321)
:00401098 81C1A93E0F00 add ecx, 000F3EA9<----add 000F3EA9 to the hard coded number (999)
:0040109E 90 nop
:0040109F 90 nop
:004010A0 40 inc eax
:004010A1 47 inc edi
:004010A2 43 inc ebx
:004010A3 48 dec eax
:004010A4 4F dec edi
:004010A5 4B dec ebx
:004010A6 90 nop
:004010A7 90 nop
:004010A8 83C258 add edx, 00000058<----add 58 to our new number
:004010AB 83C1A9 add ecx, FFFFFFA9<----subtract 57 from the new hard coded number
:004010AE 3BD1 cmp edx, ecx<----compare the two numbers
:004010B0 7518 jne 004010CA<----jump to bad luck if not correct
:004010B2 6800100000 push 00001000
* Possible StringData Ref from Data Obj ->"Well Done"
|
:004010B7 68AB204000 push 004020AB
* Possible StringData Ref from Data Obj ->"Congratulations. You successfully "
->"cracked this program"
|
:004010BC 6874204000 push 00402074
:004010C1 6A00 push 00000000
* Reference To: USER32.MessageBoxA, Ord:0000h
|
:004010C3 E872040000 Call 0040153A
:004010C8 EB16 jmp 004010E0
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004010B0(C)
|
:004010CA 6800100000 push 00001000
* Possible StringData Ref from Data Obj ->"Bad luck"
|
:004010CF 68E5204000 push 004020E5
* Possible StringData Ref from Data Obj ->"Bad luck. You have failed to crack "
->"this program"
|
:004010D4 68B5204000 push 004020B5
:004010D9 6A00 push 00000000
* Reference To: USER32.MessageBoxA, Ord:0000h
|
:004010DB E85A040000 Call 0040153A
--Solution--
First, at 004010AE (cmp EDX, ECX), type
? EDX <---- 13286306 (our number)
? ECX <---- 999993 (the number we want it to be)
Knowing the calculation above, we know that
ECX + 999051 - 57 = 999993
EDX + 941927 + 58 = 13286306
Therefore, to get the real number we use
999993 - 58 - 941927 = 58008
Thanks to all of those coders that make these crackmes, and of course to Eternal Bliss.
Sanhedrin
stachi@geocities.com