Crackeando y creando un keygen para Cerberus

Hace ya bastante tiempo que no hablo sobre cracking en el blog, así que me he decidido a hablar de un crackme muy sencillito que resolví hace algunos días y que podéis descargar desde Crackmes .

Supongo que si estás leyendo esto ya sabes que los crackmes son programas diseñados para que otras personas se diviertan rompiendo sus medidas de seguridad. En este caso, el crackme pide un nombre y un número de serie. Además, no nos sirve solamente con crackearlo, sino que además nos pide que creemos un keygen.

El crackme en cuestión es este:

Lo primero que se me ocurrió fue abrirlo con OllyDbg y pedirle que me mostrara todos los string que encontrase. El resultado no es nada malo:

Obviamente me lancé a ver el código que llamaba a “Good job cracker!” y esto es lo que encontré:

Se ve claramente el “chico bueno” y el “chico malo”, y justo antes de ambos hay un salto condicional JNE que en este caso nos llevará al “chico malo”. Podéis ver en la imagen como abajo dice “Jump is taken” vamos, que va a saltar al “chico malo”… tampoco es que sea de extrañar, porque no tenemos aun el serial correcto xD

Si el análisis es correcto, si modificáramos ese JNE por su contrario (JE), cualquier serial inválido se convertiría en válido. Probémoslo:


Pues sí :) Efectivamente hemos parcheado el crackme y cualquier serial incorrecto será reconocido como bueno. De todos modos el crackme nos pide que hagamos un keygen, cosa que por cierto es mucho más limpia que parchear el programa.

La creación de un keygen suele requerir el estudio del algoritmo de verificación del crackme para crear otro programa que genere números aceptados por ese sistema. Sin embargo, si realizáis una ejecución paso a paso del crackme, llegaréis a una parte muy interesante:

En esta parte el crackme ha leído el nombre que hemos introducido y ha generado el número de serie válido (que almacena en la dirección 0018F960 que ha guardado en ESI). Esto lo hace para posteriormente compararlo con el que hemos introducido nosotros, si son iguales lleva al “chico bueno” y si no al “chico malo”.

¿Por qué es interesante? Veréis, el crackme genera el número correcto y lo mantiene en memoria, así que nosotros podríamos hacerle una perrería y hacer que sea el propio crackme el que nos diga la clave. En concreto, mi idea es substituir el mensaje de “Wrong! Try again!” por la clave.

Para eso nos vamos a la parte del “chico malo” y substituimos la dirección que apunta a “Wrong! Try again!” por la que apunta a la clave:


Tras esto, si ejecutamos el crackme y tecleamos cualquier cosa por nombre, el crackme nos mostrará la clave válida para ese nombre :)

Y eso ha sido todo por hoy :) Si tenéis cualquier duda… ya sabéis dónde está el espacio para los comentarios ;)

About the Author

Me llamo Pablo Carballude González, soy graduado en computación con master en HCI y Seguridad Informática. Actualmente trabajo para Amazon en Seattle como Software Developer Engineer. Soy de esas personas que no saben si los textos autobiográficos deben ser en primera o tercera persona. Lo intenté en segunda, pero no le entendí nada :P