The Cracking Manual
The Cracking Manual
-------------------------------------------------------------
Disclaimer: The author of this text shall hold no liability
for special, Incidental, or consequential damages arising out
of or Resulting from the use/misuse of the information in this
File. The Cracking Manual
Introduction ------------ Welcome to the
wonderful world of cracking. What is cracking? If you don't
know and you're reading this, ask yourself why? Anyway,
cracking is the art of removing copy protected coding from
programs. Why do this? In recent years, software companies
have been fighting to keep copy protection in their software
to avoid their work to be illegally copied. Users feel that
such copy protection is ridiculous in that it violate their
own rights to make backups of their sometimes expensive
investments. Whichever side you may favor, this manual
will go into some detail on removing copy protection from
programs. If you feel offended by this, then I would suggest
you stop here. Please note, I do not endorse cracking for the
illegal copying of software. Please take into consideration
the hard work and effort of many programmers to make the
software. Illegal copying would only increase prices on
software for all people. Use this manual with discretion as I
place into your trust and judgement with the following
knowledge.
trace into the CALL using "T". After that, you can start
using "P" again to uncover the location of the code. You will
most likely encounter a condition that will resemble situation
1. Follow its instructions. Shortcuts For Keyword Entry
Protections ---------------------------------------
With keyword entry systems, you might be lucky to have the
codes stuck somewhere into file in its
uncompressed/unencrypted form. This means that you can "see"
the keywords in its ASCII format. This case is cool because
you won't have to do any tracing to crack the program. All
you have to do is to dump the contents of the files to find
something that looks like a keyword. (Always backup the file
that you are about to alter.) When you have found such a file
and the location of the codes, all you have to do now is to
change the codes to values that you know. For example, one
code might call for you to enter "PIRATE". It's a bitch if
you don't know the code. But if you change the code to your
name or something else you will never forget ("CYBORG"), then
you'd be set. However, in most instances, you can't
simple just type over the old code with your new code. In
high level languages, these codes are stored as strings. In
'C', strings are stored in their ASCII equivalent. They are
then terminated with a NULL character (this is a 0). In
Pascal, the lengths of the strings are first stored in the
first position. Then, the ASCII is stored. NULL
Terminated Strings ----------------------- So, if
you see zeros after the codes, this is a NULL terminated
string. Now, start at the beginning of the string and enter
your code. Then, enter the '0'. Make sure your string is
less than the original string since 'C' refers to these
strings also with pointers. Pre-Length Indentifier
---------------------- If you see numbers before strings,
enter your own code. Then change the length of the code
appropriately. Make sure you do not exceed the length of the
original string. Code Guards Through Pointed Icons
--------------------------------- We have a case where we
do not type in keywords. Rather, we must use a pointer device
such as the cursor keys on the keyboard, the mouse, or
joystick. These protections are a bit more complicated since
there are no strings to compare against. Rather, the input
will be a number stored in memory or a register. This is what
makes this copy protection more difficult to crack. We have
to hunt through code to find out which compare instruction is
the key. What you have to do is to find the general
location of the copy protection code as before. Then, instead
of typing in the keyword, you select the icon. Like before,
you must step slowly through the code and go until the program
JUST STOPS asking you for the code. For example:
2E0B:0000 E8740E CALL 0E77 2E0B:0003 38D0
CMP AL,DL 2E0B:0005 7569 JNZ 0070
2E0B:0007 CB RETF You might decide to trace over
the call at address xxxx:0000. But then, you see that the
screen displayed the icons and you got to select the code.
Then, the procedure does some disk activity and you return to
address xxxx:0003. If you see something happen after you have
just finished entering the code or if it is slow in returning
you to debug, then, some code must have been performed before
you returned. In this case, you must trace into the CALL to
see what has happened. If not, there is still a small
probability that there were some instructions that formatted
the code you entered and saved it to a memory location.
(We'll talk about multiple doc checks later.)
Realize that most of the programs that you will be cracking
have been programed by C or some other high level language.
These languages often use the stack (SS:SP) to pass parameters
(variables) or to create local variables for a procedure's
use. Most likely, you will see compares to data contained
within the stack such as "CMP AX,WORD PTR [BP+10]" or "MOV
DX,WORD PTR [BP+10]". This is what you hope to find, although
not always the case. If you do see some access via the stack
using the BP register as a pointer, you may have something
there. Then, all you would have to do is to mess around the
flags register (most likely, JZ/JE will be used) at the
compare instruction.