This is a keygen for the Ice9 crackme by TripleTordo. You can find a link to the original crackme here. This keygen is stylized using the retro keygen aesthetic of the early 2000s. For instructions on how to use this tool, scroll down to the next section below. Later in this README is a breakdown of the serial generation algorithm that the Ice9 crackme uses.
To use this keygen, simply navigate to the Release
folder, then download Ice9-Keygen.exe
. You can store it anywhere on your computer, and no installation is necessary -- just download
and run. Once open, simply enter the name and click "Generate" to get a valid serial. You can also click "Copy" to add the serial
number to your clipboard.
This keygen plays several chiptunes (i.e. "keygen music") as per the retro keygen aesthetic. It cylces through the playlist automatically. You can mute or unmute it by using the checkbox in the bottom left corner. This keygen uses the SharpMik library to play XM audio files. You can find a link to the archive of the XM files used for this keygen here. Below is a list of the tracks used:
- "unreeeal superhero 3" by rez+kenet
- "Valium candies" by Jakim
- "orion spaceforce23" by dualtrax
- "sleepy sunflower" by HyoChan
If you wish the reverse this crackme and step through the code, you will have to disable the IsDebuggerPresent()
function that is called
on offset 0x469 of the primary module. You can do this by changing the very next instruction to cmp eax, 0
. Since the function that checks
for a debugger returns a boolean value, this effectively disables the debugger check.
Before mutating the name into a serial, the program first checks to ensure the length of the name is between 4 and 10 characters long. Once a valid length is verified, the user-entered name is pushed onto the stack by the instruction on offset 0x4D5 of the primary module, then the serial generation algorithm begins. The serial generation algorithm can be broken down to the following steps:
- Iterate through each character of the name, ignoring the last character.
- If the character's ASCII value is in the range 0x41 to 0x5A (inclusive), add 0x2C to the ASCII value; otherwise, increment the modifier by the original ASCII value.
- The modifier undergoes 4 changes; first it is incremented by 0x29A, then it is multiplied by 0x3039, then it is decremented by 0x17, then lastly it is multiplied by 0x9.
- The algorithm repeatedly converts the remainder of the modified value divided by 0xA to its ASCII character representation, prepending it to the serial string, until the modified value becomes 0.
- Lastly, the algorithm iterates over the characters of the input name, starting from the fourth character, and appends each character to the previously generated serial key.
-
crackmes.one: The source of the original crackme. This site contains a rich repository of crackmes and other reverse engineering challenges. Highly recommended to improve your reverse engineering skills.
-
Guided Hacking - How to make a Key Generator KeyGen Tutorial: An in-depth guide on reversing the Ice9 crackme. I recommend checking it out for a visual step-by-step on how to reverse the serial generation algorithm.
-
Essential Keygen Music: A comprehensive collection of 100 chiptunes commonly used as keygen music. What's great about this archive is that the XM files appear to be direct rips from keygens, as their metadata is intact.
-
The XM file structure: A copy of the original documentation on the XM audio file format by Fredrik Huss. Was useful to get an understanding of how XM files are structured.
-
SharpMik: A pure C# audio library that supports XM audio files. This was essential to getting the keygen to play the chiptune XM audio files.
-
Costura: A C# library that lets you embed references as resources. This library was very useful for embedding the SharpMik assembly references into the keygen's PE file.