sábado, 11 de agosto de 2012

[Tutorial] Crackear programas

Introducción

Como podemos imaginar, crackear un programa no es tarea fácil, es decir, son bastante complejas dependiendo del nivel del programador, por eso, se necesita bastante conocimiento de lenguaje de bajo nivel y especialmente de ensamblador. Os dejare unos cuantos manuales de ensamblador al final de este tutorial.


Herramientas Recomendadas



A lo largo de este tutorial iremos viendo algunas técnicas básicas de crackeo de software. Para poder llevar a cabo las técnicas básicas de crackeo de software necesitaremos los siguientes programas

- Un programa para desensamblar ejecutables. Recomiendo los siguientes:

          -W23dasm:  descarga : http://www.softpedia.com/progDownload/WDASM-Download- 1821.html
          - Ollydbg: Descarga: www.ollydbg.de 

- Un editor de código hexadecimal, como el UltraEdit

Es lógico pensar que a ningún programador le va a gustar ver que su software esta crackeado, por eso hay que ser cauteloso y no abusar  ;)

Por eso los programadores ponen "trampas" en el código para confundirnos, o incluso para dañar al ordenador donde estamos intentando el crackeo, por eso se recomienda hacerlo con un ordenador de prueba, por si acaso.


El mejor consejo para esquivar estas "trampas" será el sentido común y el estudio del código, por eso es importante tener conocimientos sobre el lenguaje en que esta echo.


Técnicas de crackeo



El gran problema del crackeo de software es que cada programa es diferente. Por eso es complicado dar una pauta para crackear cualquier software, asi que me limitare a mostrar la manera de hacerlo con varios ejemplos y luego será vuestra mision probarlo, pero sin hacer daño.


Lo primero que tendremos que hacer en todos los casos será desensamblar el ejecutable que
queremos crackear y estudiarnos el código para localizar el proceso de registro.

Para localizar las instrucciones que integran el proceso de registro lo más fácil será ejecutar la aplicación en cuestión e intentar registrarnos poniendo los datos que queramos. La idea es conseguir que el programa nos deniegue el registro o el acceso al mismo.

Una vez que conocemos lo que nos muestra el programa cuando nos deniega el registro del mismo podemos comenzar con nuestra sesión de cracking, por fin  ;D


Vamos a ver un par de técnicas que podemos utilizar para intentar crackear un programa:


-Búsqueda del hardcode: Esta técnica es la más sencilla y lo que se hace es buscar dentro del ejecutable, el código o códigos de validación del software.

-Cambio del salto condicional: Esta técnica la podremos utilizar en muchos programas, consiste en buscar la parte del código donde nos lleva al mensaje de error de registro de la aplicación e intentar invertirlo para que nos lleve al mensaje de registro satisfactorio.

Búsqueda del hardcode


Como ya hemos dicho, esta técnica consiste en buscar el código o los códigos necesarios en el proceso de registro de un software sobre el código fuente.


IMPORTANTE: A veces los códigos de validacion no se encuentran escondidos en el propio ejecutable, pero si en otro fichero .ddl o librería en la carpeta de instalación. Este será el fichero que tendremos que desensamblar

Lo primero que tendremos que hacer será descargarnos e instalar el desensamblador que deseamos utilizar.
Yo usare el W32dasm. Una vez instalado comenzamos abriendo el ejecutable del programa que queremos crackear con él.

Está basado en el programa intellibots 1.2.1 ( de evaluación). Tenía el manual perdido pero no he podido encontrar el programa, por eso os lo explico sin imágenes. Lo siento  :-[ :-[

Lo primero que vamos a hacer será desensamblar el ejecutable del programa. Volvemos a buscar el texto del código de registro y hacemos doble clic sobre él. Esto nos llevara a la instrucción ensamblador donde se hace referencia a este texto. En este caso, tras hacer doble clic nos llevara a la línea 23816 del código.


Si subimos la vista unas líneas más arriba aparece el texto siguiente:

Código: [Seleccionar]
* Referenced by a (U)nconditional on (C)onditional Jump a address:
|:0040DBB8 (C)
|

Lo que nos viene a decir esta frases que a esta parte del código se llega tras evaluar unas sentencia condicional, exactamente la localizada en el offset 0040DBB8

Podemos movernos a un offset en concreto con el W32dasm, tecleando su número en la ventana  que aparece al acceder al menú Goto> Goto Code Location.


Una vez introducido el código del offset a donde queremos movernos no tendremos más que pulsar en OK y nos llevara a esa parte del código.

Al acceder al offset de donde  nos decía que procedía la expresión condicional nos aparece el linio :

:0040DBB8   757B                             jne          0040DC35


La instrucción ensamblador de esta línea es un salto condicional que evaluara si el programa se encuentra validado. Para ello busca el fichero de configuración del programa y compara el código de validación almacenado allí con el código valido.

En el caso  de que el programa no esté validado correctamente esta expresión condicional se cumplirá y nos llevara al offset 0040DC35 que es la parte del código que nos muestra el mensaje del producto en la versión de evaluación.

Por eso lo que se ha de hacer es cambiar este salto condicional para que nos lleve a esa parte del código aunque el programa o se encuentre registrado.

Nos hemos de fijar en la parte inferior de la pantalla de W32dasm, en la barra de estado donde pone

@Offset 0000CFB8h


Bien, pues tendremos que anotar la parte que hay antes del carácter "h" quitándole los ceros de delante : CFB8



Una vez tenemos ese dato que no simboliza el lugar exacto en el código de la instrucción que queremos modificar es hora de abrir el ejecutable con un editor hexadecimal.

En nuestro caso vamos a utilizar el programa UltraEdit, pero cualquier programa es bueno.

Una vez abierto el ejecutable debemos posicionarnos en la posición exacta que nos apuntamos en el W32dasm (CFB8). En UltraEdit para posicionarnos en una linio del código concreta podemos hacerlo desde el menú   Buscar > Ir a línea/pagina.

Una vez posicionados en la línea de código que nos marco W32Dasm aparece el cursor en la pantalla sobre el valor hexadecimal  75, que modificaremos


La instrucción condicional que nos encontrábamos era del tipo "jne" para que tenga el efecto contrario al esperado y se salte la validación del registro. Como vemos la instrucción ensamblador del salto condicional jne se traduce en hexadecimal en 75. Si queremos cambiarla por una instrucción del tipo "je" debemos poner 74

Con este simple cambio la instrucción condicional se evaluara falsa y no accederá a la porción del código que comprueba el registro, por lo tanto podremos acceder al programa sin problema.

Una vez sustituido el 75 por el 74 en ultraEdit solo nos quedara guardar los cambios en el fichero ejecutable y probar a entrar en intellibots, que no nos pedirá ahora los datos de registro.



NOTA: Es muy importante no tener abierto en ese momento el programa, ni el desensamblador con el ejecutable y es recomendable hacer una copia de seguridad del programa, por si acaso


Crackear con ollydbg



Bueno, para comenzar nos descargamos el ollydbg en el link que he puesto antes y nos descargamos un crackme de prueba.

http://www.megaupload.com/?d=ES6Z4NAC

Esta subido por mí y sin virus. ;D


Introducción



La mayoría de los sistemas de validación se basan en introducir un numero de serie correcto no¿? A la hora de introducir el número de serie, dentro del programa se realiza una pequeña comprobación y si es correcto activa el programa ( Chico bueno) y si no es correcto no se activa ( Chico malo )



Para saltarse esa parte lo único que se ha de hacer es localizar la zona donde el sistema realiza la comprobación e indicar que siempre ( sea o no el serial correcto ) se vaya a la zona del chico bueno.


Para eso hay que utilizar la herramienta ollydbg, la cual hemos instalado antes y vamos a utilizar el programa crackme que os he dejado antes.

Para activar el programa introducimos el password y fallamos aposta, como no conoces el serial te saldrá un mensaje de error, eso nos ayudara.

Lo que sale es la clave introducida es incorrecta



Ahora abra el programa crackme con el ollydbg. Seleccione el botón que busca cadenas y localice el mensaje de error. ( la clave introducida es incorrecta ). Para eso pulsa el botón derecho sobre la ventana y seleccione:

Search for all referenced string



Y saldrá una nueva "ventana" donde ya saldrá la contraseña, nos hemos de fijar muy bien, pero este crackme era fácil, ya que es para mas novatos.




Este es muy fácil, y esperaba que durase mas pero bueno  ;D

Si eso aquí de unos días pues hago otro de mas nivel  ;)

Manuales ensamblador

-http://www.lawebdelprogramador.com/cursos/Ensamblador/index1.html


Espero que os haya gustado, y gracias por leerme

No hay comentarios:

Publicar un comentario