lunes, marzo 27, 2006

Cracking (y III): Cracker por un día

Ésta es la tercera y última parte de ésta serie sobre Cracking. En el primer artículo vimos una pequeña introdución y un poco de filosofía. En el segundo, aprendimos que los programas pueden modificarse con bastante poco esfuerzo mediante el editor adecuado. Nos queda entender cómo podemos utilizar éstos conocimientos para romper la protección de un programa. Al final del documento hay una advertencia sobre la legalidad de estos contenidos que debería leer.

Pues bien, en éste artículo vamos crackear un crackme, y así entenderemos cómo funcionan las protecciones de los programas y cómo se crean los cracks para evitar algunas. Es un tema muy muy técnico, pero voy a intentar que sea más o menos comprensible. Propongo a quienes tengan más interés por el sunto y más experiencia en la informática que sigan el ejemplo práctico. Quienes lo deseen, que salten directamente al final del documento, allí explico algunas conclusiones. Pero mi consejo es que me sigan, tal vez descubran su lado oscuro...

Bien, necesitamos una herramienta más compleja y potente que nuestro editor hexadecimal: un depurador. Los depuradores son programas que se utilizan en la informática para corregir los fallos de las aplicaciones. Podemos considerar un "fallo" de un programa el que pida una clave para usarlo (vaya cara)... de modo que un depurador nos servirá para llevar a cabo nuestras maldades. Lo que hacen fundamentalmente estos programas es "desarmar" los programas y dejarnos ver qué hacen.

El más interesante es el OllyDbg, que puede descargarse gratis y es uno de los más utilizados. Bien, ya tenemos el arma, ahora necesitamos la diana. Se trata del crackme que utilizamos en la sesión anterior. Como recordará, se llama abex' 5th crackme, puede descargarse libremente y tiene esta carita de niño Jesús:

Como ven, es algo sencillo e imita conceptualmente a las ventanitas que nos exigen el número de serie para ejecutar un programa o renovar su licencia. Bueno, vamos a ver si cuela, ponemos un número al azar y...


No ha habido suerte y nos ha pillado... es lo más normal. Ahora es cuando empieza la guerra. Abrimos el OllyDbg, y cargamos el ejecutable del crackme, abexcm5.exe. Vemos una ventana con el código de la aplicación. Queda así de bonito y de ilegible:

Ahora pensemos un poco... si escribimos el número de serie correcto tendría que salir una ventana diciéndonos que lo hemos conseguido... vamos a intentar localizar la parte del código en que se toma la decisión de si la cadena es buena o mala (¡no se asuste, es muy sencillo!) Botón derecho sobre la ventana. Sale un menú y nos vamos a "Search for - All referenced text strings", que nos va a decir todos los textos interesantes a los que se hacen referencia en el código.

Ahora nos aparece una nueva ventana donde vemos muchas cosas interesantes... si nos fijamos, un texto del programa es "Yep, you entered a correct serial!". Seguro que es el texto que aparece en la ventana cuando escribimos el número correcto...

Con doble clic en la línea clave nos vamos a la línea del código que nos interesa. Como vemos pertenece a un bloque que, a todas luces, genera un cuadro de diálogo que nos informa del logro. La dirección 00401117 contiene la primera instrucción del bloque. Entonces, suponemos que si el usuario escribe el número "bueno", se salta a esa dirección. Bien, vamos a ver desde dónde se salta a esa dirección:

Y en la ventana que aparece, vemos que hay una instrucción que hace referencia a nuestro mensaje de enhorabuena: (004010FF) JE SHORT abexcm5.00401117 que no quiere decir sino: si la condición es cierta, salta a la dirección 00401117 que es, casualidades, la del mensaje que nos interesa. La instrucción JE significa "salto condicional" (compruébelo)

No nos interesa la condición que evalúa el JE, pero lo que nos interesa es que es un salto condicional: salta si el número es bueno. ¿Y si cambiamos ésta instrucción por: "salta siempre, aunque el número sea malo"? Se puede hacer y vamos a hacerlo.

Posicionados sobre la instrucción, hacemos doble clic y nos aparece una ventana que nos permite escribir una instrucción en lugar de la que tenemos. Vale. Pues el código para saltar siempre es JMP (de jump, saltar en inglés). Vamos a cambiar el JE por un JMP. Éste es el "antes":

Y ahora el "después":

Tenemos que hacer clic una vez en "Assemble" para seguir. Luego salimos con cancel. Ya hemos modificado el código, pero éste código reside en memoria y no es persistente: tenemos que guardarlo. Para ello, clic sobre el código, nos vamos a "Copy to executable - All modifications". Cerramos la ventana que aparece y contemos "Sí" a la pregunta de si queremos guardar los cambios. Ahora lo guardamos con otro nombre por si acaso.

Si lo hemos hecho bien, nuestro programa crackeado se tragará cualquier número de serie que le escribamos... compruébelo:

¡Nuestro primer crack ya está listo! Para los avanzados, un ejercicio: el número de serie "bueno" ha estado delante de nuestras narices un buen rato, ¿se atreven a adivinarlo? Si lo hubiéramos extraído sin más del código, no habríamos tenido que modificar el programa. Los crackers experimentados opinan (con razón) que es mucho más bonito encontrar el número sin tocar el programa, pero la idea es que veamos cómo se rompen las protecciones de los programas comerciales.

Es un ejemplo sencillo, pero da una buena idea de cómo funcionan las cosas. Si el crackme hubiera sido programa comercial, podríamos usarlo ahora sin restricciones, pues gracias a nuestras modificaciones, validaría como bueno cualquier número de serie. Sin embargo, estaríamos cometiendo un delito, y este blog no lo apoya ni lo fomenta en ningún modo.

Romper la protección de un juego no es ningún misterio de la metafísica: es informática pura y dura, abrir el programa, cambiar lo que no nos gusta y guardarlo. Ojo: las protecciones reales de los programas comerciales suelen ser muchísimo más complicadas que ésta. De hecho hay crackmes muy enrevesados, algunos los publican particulares aficionados al tema, otros grandes compañías que quieren poner a prueba un sistema de seguridad que están desarrollando.

Caminamos por el filo del cuchillo: aprenda, manipule y destruya si quiere, pero bajo su responsabilidad.



Atención

Éste es un artículo divulgativo, cuyo único objetivo es entender de forma práctica cómo se rompen las protecciones de los programas. En ningún modo se incita a la realización de actividades ilegales, y de acuerdo con éste principio, declinamos toda responsabilidad sobre las posibles aplicaciones de los conocimientos aquí expuestos.


Artículos anteriores:
Cracking (II): A golpes de martillo
Cracking (I): El poder del lado oscuro

8 Comentarios:

A las 2:36 p. m., Anonymous Anónimo escribió... (¡Gracias, Anonymous Anónimo!)

L2C-57816784-ABEX :-)

 
A las 3:10 p. m., Blogger Pau escribió... (¡Gracias, Blogger Pau!)

¡Que lujo de lectores! :-)

 
A las 6:09 p. m., Blogger Ploncios escribió... (¡Gracias, Blogger Ploncios!)

¡Cómo mola!

Realmente no pensaba que fueras a desensamblar código en el blog (porque parece bastante por encima del nivel habitual), pero me has sorprendido.

Yo antes tocaba muchísimo ensamblador, por los tiempos del 386... pero windows me quitó esa sana costumbre, ahora lo tengo muy oxidado.

Una pregunta para que la respondas si puede ser en el futuro...
¿Cómo hacen los crackers para saltarse las protecciones de los DVDs? ¿Y los DRMs y esas cosas? ¿Conseguirán las discográficas que sea imposible con los nuevos formatos que se aproximan (bluray y esas cosas)?

Gracias a los crackers, muchos podemos disfrutar de películas y música... para evaluar y comprar posteriormente, claro.

 
A las 8:32 p. m., Anonymous Anónimo escribió... (¡Gracias, Anonymous Anónimo!)

Muy bueno y educativo. Saludos.

 
A las 8:38 p. m., Blogger Manu escribió... (¡Gracias, Blogger Manu!)

Una serie de artículos muy interesante, sin duda.

En especial me ha gustado la segunda parte, me resulto muy curioso cambiar "Enter your serial" Por lo que tú quieras. Pensaba que para eso habría que tener unos grandes conocimientos de programación, y veo que no es así.

Una cosa que me ha encantado acerca del artículo ha sido que en todo momento has explicado las cosas pasito a pasito y que has puesto capturas de pantalla de prácticamente todo. Te felicito, muy bien hecho.

Saludos,

Manuel

 
A las 9:31 p. m., Blogger Pau escribió... (¡Gracias, Blogger Pau!)

Vaya, muchas gracias a todos por vuestros amabilísimos comentarios, se le sube a uno el autoestima :-)

Ploncios: el cracking de las protecciones de los cedeses es algo más complicado, porque cada fabricante emplea un método, así que cada disco es un mundo. Pero me parece un tema muy interesante, veré si puedo escribir algo sobre el tema :-)

Respecto a lo que dices de si las discográficas se saldrán con la suya, la respuesta es que ¡no! Todo sistema es violable, y por muy complejas que sean sus protecciones siempre habrá una forma de romperlas... ya verás, el bluray estará roto antes de que lo presenten al público :-D

¡Saludos!

 
A las 12:39 a. m., Anonymous Anónimo escribió... (¡Gracias, Anonymous Anónimo!)

Interesantísimo, he usado ensamblador para programar microcontroladores y no pensé que sirviese para esto, :O

 
A las 1:25 p. m., Anonymous Anónimo escribió... (¡Gracias, Anonymous Anónimo!)

Ploncios, pretender que los bits no se puedan copiar es como pretender que no puedas repetir algo que has escuchado y entendido.

Mis felicitaciones por el artículo.
Me apunto ese debugger parece muy chulo.

Saludos! :D

 

Recuerda que nos hemos mudado a nosololinux.com

<< Home