home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Reverse Code Engineering RCE CD +sandman 2000
/
ReverseCodeEngineeringRceCdsandman2000.iso
/
RCE
/
E_bliss
/
eb_tut20.txt
< prev
next >
Wrap
Text File
|
2000-05-25
|
6KB
|
158 lines
Tutorial Number 20
Written by Etenal Bliss
Email: Eternal_Bliss@hotmail.com
Website: http://crackmes.cjb.net
http://surf.to/crackmes
Date written: 27th May 1999
Program Details:
Name: W32Dasm CrackMe I
Author: LaZaRuS
Language: Borland Delphi 2.0
Tools Used:
W32Dasm
Cracking Method:
Zen
Viewing Method:
Use Notepad with Word Wrap switched on
Screen Area set to 800 X 600 pixels (Optional)
__________________________________________________________________________
About this protection system
Protection is based on a code which is hardcoded. How I know? Well, look at
what LaZaRuS has to say in his CrackMe.
"Actually in my opinion it is damn hard to code a CrackMe for W32Dasm. It
can't have serial calculation or something else you can only follow in SICE.
I tried my best and I believe it is little tricky."
From here, I know that I will be able to follow easily, there will be no
serial calculation. So what's left? Hard-coded codes hiding somewhere...
_________________________________________________________________________
W32Dasm
First, disassemble the CrackMe using W32Dasm. You do this by running W32Dasm,
then choose "Disassembler" -> "Open File To Disassemble".
As usual, you should look at the String Data Reference (SDR). That is the
last 2nd icon (just next to the printer icon). What did you see? A lot of
words I don't understand because they are not in English. Don't give up yet.
Scroll through everything and see what you have.
Towards the end, you will see "Sometimes, the wrong code can " and "Wrong code".
To go to where the Strings are, double click on the string you want. In
this instant, we would like to see where the string "Wrong code" is used.
So, double click on "Wrong code". You will see
=================================================================
:0042689B 8B45FC mov eax, dword ptr [ebp-04]
* Possible StringData Ref from Code Obj ->"Wrong code"
|
:0042689E BA0C694200 mov edx, 0042690C
:004268A3 E8CCCBFDFF call 00403474
:004268A8 7518 jne 004268C2
=================================================================
To make sure that this string is only used once, double click it again. You
should see another location where this string is used.
=================================================================
* Possible StringData Ref from Code Obj ->"Wrong code"
|
:004268C9 BA50694200 mov edx, 00426950
:004268CE A124864200 mov eax, dword ptr [00428624]
:004268D3 E830B3FFFF call 00421C08
=================================================================
You should see that they are very near one another...
I've combined the two references together below.
=================================================================
:0042689B 8B45FC mov eax, dword ptr [ebp-04]
* Possible StringData Ref from Code Obj ->"Wrong code" <<-- 1st reference
|
:0042689E BA0C694200 mov edx, 0042690C
:004268A3 E8CCCBFDFF call 00403474
:004268A8 7518 jne 004268C2
:004268AA 6A00 push 00000000
* Possible StringData Ref from Code Obj ->";-)"
|
:004268AC B918694200 mov ecx, 00426918
* Possible StringData Ref from Code Obj ->"Sometimes, the wrong code can "
->"be the good code"
|
:004268B1 BA1C694200 mov edx, 0042691C
:004268B6 A124864200 mov eax, dword ptr [00428624]
:004268BB E848B3FFFF call 00421C08
:004268C0 EB16 jmp 004268D8
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004268A8(C)
|
:004268C2 6A00 push 00000000
:004268C4 B94C694200 mov ecx, 0042694C
* Possible StringData Ref from Code Obj ->"Wrong code" <<-- 2nd reference
|
:004268C9 BA50694200 mov edx, 00426950
:004268CE A124864200 mov eax, dword ptr [00428624]
:004268D3 E830B3FFFF call 00421C08
=================================================================
Notice the "Sometimes, the wrong code can "? Isn't it weird? Instead of saying
"Congrats, you have cracked my CrackMe" or something of that sort, we get this.
What is LaZaRuS trying to tell us??? Well, he is giving us a BIG hint. 8)
Look at the 2nd reference of "Wrong code". There is a reference of a conditional
jump (at 4268A8) which will bring us to it . This might mean that if we enter
the code wrongly, we will be shown the message saying "Wrong code".
Run the CrackMe and type anything and try to register. You will get a message
saying "Wrong code". 8)
So, what is the 1st "Wrong code" doing there then? And what does the
"Sometimes, the wrong code can be the good code" mean???
Notice the call at (4268A3) and then followed by the conditional jump we
mentioned? Normally, in a compare routine, there is always a CALL and then
a conditional jump. This might be the case for the CrackMe. In this case,
the 1st "Wrong code" is moved in EDX. A line above it moves something into
EAX. Then the call...
With a bit of Zen and frustration, let's try entering "Wrong code" as the
code. 8)
Did you see a message showing you "Sometimes, the wrong code can be the
good code"?
Do you know what this means? You have just cracked the CrackMe...
__________________________________________________________________________
Final Notes
This tutorial is dedicated to all the newbies like me.
And because I'm a newbie myself, I may have explained certain things wrongly
So, if that is the case, please forgive me. Email me if there is anything
you are not clear about.
My thanks and gratitude goes to:-
All the writers of Cracks tutorials and CrackMes
and also to all the crackers that have been supporting my site and project forum.