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.

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

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