Cómo crackear un sencillo crackme

Hoy me gustaría hacer algo un poco distinto ya que tengo algo tiempo. Romperemos un sencillo “CrackMe” que he encontrado en la web de Yango Soft.

Los “CrackMe” son pequeños programas con algún sistema de protección (serial, usuario y contraseña, cd-check, etc…) destinados a que experimentes con ellos y los desprotejas. En su web Yango propone una solución… yo le haré una pequeña modificación que, a mi modo de ver, es una mejora ;-)

Empecemos, el CrackMe puedes descargarlo desde http://usuarios.lycos.es/sisar/yangosoft/herramientascracking.php . Una vez descargado, descomprímelo y abre el Crackme1.exe. Si intentas acertar el nombre y el código obtendrás una pantalla informándote de que has fallado, tal que así:
Nuestro objetivo es pasar de ese mensaje “Incorrecto” a lo que quiera que nos diga cuando introduzcamos el código bueno. Para ello abrimos un desensamblador, en mi caso el “IDA Pro”.
Elegimos un proyecto “Windows -> PE Executable” y le damos la ruta al Crackme1.exe, acto seguido nos preguntará la ruta a MSVBVM60.dll, que es una librería de Visual Basic, no la necesitaremos así que cancelamos.

En la ventana superior derecha “Names Window” podemos ver una entrada “aIncorrecto” que se parece sospechosamente al mensaje que obteníamos:

Daremos doble click e iremos a esa zona del código:
Parece que “aIncorrecto” tiene una referencia desde 004023B8, así pues, hacemos doble click y miramos que hay en esa zona:Vemos que esa sección del código empieza ahí, luego no puede realizar la comprobación del código. ¿Pista falsa? No, es perfecta. Sólo necesitamos saber quién llama a esa parte del código… porque el que llame a esta parte tiene que ser el que realice la comprobación del código. Para eso, seguimos el mismo procedimiento de antes, es decir, vamos a la parte del código que hace referencia a esta. En este caso 00402370:Vemos que aparece la sección de “Correcto”, así que la comprobación tiene que estar cerca. Exactamente la línea que hacía referencia al código “Incorrecto” es un salto si es cero (jz). Veamos, en ese caso podríamos intentar modificar el salto para que salte si NO es cero… es decir que cuando metas uno incorrecto dirá que es correcto y con uno correcto dirá que es incorrecto. Esa fue la solución de Yago, yo propongo noopearlo. Es decir, eliminar el salto… de esa forma no hará la comprobación y siempre irá al código correcto.

Para eso, hacemos click encima del jz y nos vamos a la pestaña “Hex View-A”. Esto nos enseña el código hexadecimal. Apuntamos unos cuantos números empezando por los que él nos marca (74 3E), yo he cogido “743EFFD68D55888D4D”. Nos vamos a un editor hexadecimal (yo uso Hex Workshop) y cambiamos el “74 3E” correspondiente a JZ por la instrucción “NOOP”, es decir, instrucción vacía (vamos, que no hace nada) “90 90”. Guardamos y ejecutamos de nuevo el programa. Ahora, pongamos lo que pongamos obtendremos:Espero que os haya gustado :) Ya sabéis, cualquier comentario, duda o sugerencia será bien recibida ;-)

Por Carballude

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

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *