Reverse: rmm rmm rmmm...
default
crackmes.de—Notes
Reversing has interested me even before I knew the term. I have
always loved taking things apart. I came across the reversing seen
around 2000/2001. This stuff was way over my head at the time and
still is. I want to learn to program. I want to learn to reverse.
There are so many languages I want to research and so many other
things to learn. Over the years I have sat down and dabbled a few
hours here and there. With both reversing and programming. Reading
all kinds of tutorials and papers. It goes on and on.
It does not seem like I have gotten very far. Learning to reverse
is taking me forever. I get so distracted with all the languages.
Trying each one I hear of, that interests me. I'm still no coding
guru. PHP is the language in know the most and it is not enough to
brag about. I don't have the mindset to just sit down with one
language and learn it well. I just try to learn as much as I can
about the language for as long as it keeps my attention. Hoping
that one day I will see the overall picture. Allowing me to code
in any language I come across, regardless of the syntax.
I have lost alot of the programs and information I have gathered
and written. Due to reformats, corrupted hardDrives, pulling out a
drive and replacing it with a bigger one, not backing up and giving
the drive away months to years later. Looking back, it can be
disappointing. Looking ahead, I know there are still so many resources
available on the net. Somewhere in my brain I'd like to believe the
info is still there. Now it is time to start recording some of this
stuff so I can look back and see some progress. The internet and
its communities have done me well. This is mostly for myself, but
if it helps anyone else. CHEERS!
So the plan is to get back into reversing. It's been eight months
since I played. Starting off, I'm just going to pluck some newbie
crackMes off the net, crack them, make some keygens, and take some
notes, and I'll go from there. During my programming selfEducation,
it has been hard to think up ideas and projects to program. Recently
I came to the conclusion that there would be no better or should I
say more fun way to learn to program than creating keygens for
crackMes. I'd be learning some Assembly along the way. I'd be able
to research any language and have some challenging problems to solve
with it. Self motivation at it's finest!
I will only be cracking legal materials that others have developed
for this purpose. At present I don't plan to contact each author
before posting my notes. I don't really like the idea of advertising
myself, but it is time I give back to the community that has intersted
me so much. If this offends any of you authors of these crackMes,
please let me know and I will reThink my course of action. Please
DO NOT ask me how to crack any apps or even crackMes. I don't know
how! Spend some years and I'm sure you will figure it out! Feel
free to read my notes. If they can not help you on your journey
then you can be certain that I am of NO use to you. This is all I
know. It is all I have done so far. This is all I have to offer!
No, you will NOT find any of the crackMes on my site. Only the
notes. I am not comfortable posting peoples crackMes without their
consent. I will give you the name of the crackMe and tell you where
I got it. The net is always changing and if you can not find the
crackMe, Please DO NOT ask me for it. I can not help you. I have
no will to go digging for a crackMe I already solved. I know this
sucks! One of the most frustrating things about learning to reverse
is an outdated tutorial that does not come with the program it is
describing. Get use to it! OR Learn to find things one the net!
Want to learn to find things on the net? Might I suggest a decent
starting point? = searchlores.org ( Go find it yourself! you seeker,
you!)
Do not stress out if I am writing a keygen in a language you never
heard of or do not have a complier/interpreter for. It is not a
big deal. A keygen can be written in any language. Just adapt the
code to your preferred language. The idea is to figure out the
algorithm used to generate a correct serial. Once you figure that
out, it is time to write a program that applies that algorithm to
any name of your choice.
Let's say we have a crackMe and we have found out the algorithm.
It is very basic. The username has to be at least four characters
long. Each letter in the username has a corresponding two digit
number.
Using the chart above we can determine the serial for any username.
The username has to be at least four characters long. So lets use
CRACKED as our username. It has seven characters. Which means our
serial will have 14 digits total. Two digits for each letter in our
username. C=03, R=18, A=01, C=03, K=11, E=05, D=04
So for our crackMe we could use:
username: CRACKED
serial: 03180103110504
We could also use:
username: IWON
serial: 09231514
I was going to claim that I don't know how to write code for a
crackMe. I started thinking about it and came up with the conclusion:
If I can reverse some code, why can't I reverse the reversing and
be on the right track. Normally you would want an exe to reverse
with a debugger and/or a disassembler, so we could figure out the
algorithm digging through ASM code. We already know it. So I'll
write this wannaBe crackMe in PHP. By the way this is the first
crackMe code I have ever tried to write.
<html>
<body>
<form method="POST" action="figureMeOut.php">
<input name="username"> username<br>
<input name="serial" type="text"> serial<br>
<input type="submit" name="submit" value="Check Serial"><br>
</form>
<?php
//grab variables posted from form
$username = $_POST['username'];
$serial = $_POST['serial'];
$submit = $_POST['submit'];
$usernameLength = strlen($username); //gets length of username
//Declare each letter as it's two digit serial
$A = "01"; $B = "02"; $C = "03"; $D = "04"; $E = "05"; $F = "06";
$G = "07"; $H = "08"; $I = "09"; $J = "10"; $K = "11"; $L = "12";
$M = "13"; $N = "14"; $O = "15"; $P = "16"; $Q = "17"; $R = "18";
$S = "19"; $T = "20"; $U = "21"; $V = "22"; $W = "23"; $X = "24";
$Y = "25"; $Z = "26";
for ($i=0; $i<$usernameLength; $i++){ //loop for each character in username
$tempLetter = strtoupper($username{$i}); //make each char uppercase and store in temporary var
$correctSerial .= ${($tempLetter)}; //replace each letter with two digit serial and concat var
}
if ((isset($sumbit))){ //stops badBoyMessage from showing before submit button has been pressed
if ($serial == $correctSerial && $usernameLength >= 4) //check for correct serial & username of 4 chars
{echo "You figured me out!";}
else
{echo "You lost?";}
}
?>
</body>
</html>
This code is pretty simple. After all I wrote it and I did not even
realize I could. We already know the algorithm and we have the
source code so lets get to the reversing part.
<html>
<body>
<form method="POST" action="figuredMeOut.php">
<input name="username"><br>
<input type="submit" value="Generate Serial"><br>
</form>
<?php
//grab variables posted from form
$username = $_POST['username'];
$usernameLength = strlen($username); //gets length of username
//Declare each letter as it's two digit serial
$A = "01"; $B = "02"; $C = "03"; $D = "04"; $E = "05"; $F = "06";
$G = "07"; $H = "08"; $I = "09"; $J = "10"; $K = "11"; $L = "12";
$M = "13"; $N = "14"; $O = "15"; $P = "16"; $Q = "17"; $R = "18";
$S = "19"; $T = "20"; $U = "21"; $V = "22"; $W = "23"; $X = "24";
$Y = "25"; $Z = "26";
for ($i=0; $i<$usernameLength; $i++){ //loop for each character in username
$tempLetter = strtoupper($username{$i}); //make each char uppercase and store in temporary var
$buildSerial .= ${($tempLetter)}; //replace each letter with two digit serial and concat var
}
echo "$buildSerial"; //prints serial
?>
</body>
</html>
Well the code did not change very much at all. Instead of printing
out a good or bad boy message, we print out the serial. We did not
get to do the intriguing part. Trying to figure out the algorithm
is the challenge. Fiddling through ASM can be a tedious process.
Pencil, paper and calculator can be close friends. Taking notes and
writing down interesting things as we come across them. Alot of
trail and error! There was no need to build a keygen. We had already
found the algorithm. We had the chart and we could have used pencil
and paper. The keygens are going to be my way of learning to program.
My way of learning to reverse? The crackMes of course! With additional
bonus points: Some ASM knowledge.
crackmes.de—Notes
default