Eliminar la comprobación de CD de programas y juegos

No sé a vosotros, pero a mí me molesta muchísimo que los programas te pidan el CD para arrancar. Normalmente son juegos, aunque también hay algunos programas de escritorio que tienen la dichosa manía. Es especialmente molesto con los portátiles porque… la gracia está en que lo sacas de casa, y no está muy bien eso de tener que llevarte una tarrina con los cds para arrancar los juegos.

El otro día me encontré un CrackMe (sí, ya se que el sitio está en chino… a veces uno se pierde navegando) que pedía que le hiciéramos creer que el CD había sido insertado. En este post voy a intentar explicar cómo vencer el CrackMe.

Lo primero es bajarse el CrackMe y las utilidades que usaremos: OllyDGB

Cuando abrimos el CrackMe obtenemos una ventana informándonos de nuestro objetivo, y después otra (chico malo) diciéndonos que hemos fallado:

Abrimos OllyDBG (con permisos de administrador) y cargamos en él el CrackMe. Aquí es donde empieza el lío. Lo primero que deberíamos hacer es localizar dónde está el código que lanza el chico malo. En este caso no es muy difícil porque está justo delante de nosotros:

La flecha central de la derecha señala al texto que estábamos viendo en la ventana. Ese es el chico malo. Un poco más abajo podemos ver que aparece el chico bueno con el texto “Ok, I really think that your HD is a CD-ROM! :P” Está claro que hay que encontrar una manera de saltarnos el chico malo para llegar al bueno pero, ¿cómo?

La primera flecha (que apunta hacia arriba) está señalando a una llamada a GetDriveTypeA. Es una función del systema que devuelve el tipo de una unidad (disco duro, removible, etc..). Es lógico suponer que el programa la usa para determinar si es un HD o un CD-Rom, así que sigámos el código y veamos si aparece algún salto al chico malo.

La segunda flecha (que apunta hacia abajo) señala una comparación y debajo tiene un salto condicional al chico bueno. Si cambiásemos la condición de ese salto (JE) por su contraria (JNE), parece que lo tendríamos solucionado. Así pues, doble click en la instrucción y la cambiamos por una JNE, apretamos assembly y a ver que pasa.

Si ejecutamos (damos al play) el CrackMe ahora obtenemos:

¡Listo! Sólo queda una cosa, escribir los cambios en el programa original, porque lo que hemos hecho es simplemente cambiarlo en memoria. Empezamos de cero (abrimos olly, cargamos el crackme, modificamos el salto) pero en vez de darle al play, seleccionamos el salto que hemos modificado, hacemos click derecho en él y seleccionamos “Edit –> Copy to executable”. Se abrirá una ventana con el código modificado, al cerrarla nos preguntará si queremos guardarla, decimos que sí y todo habrá terminado :)

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