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 ;-)