ESTUDIO DE PROTECCIONES BASICO PARA PRINCIPIANTES (También llamado cracking)

Impartido por Ratón (Nivel principiante)

 

Nota

Cada capitulo ira acompañado de su crackme correspondiente.No facilitare paginas de donde bajarse herramientas ni enlaces a paginas de crackers, la intención es que busquéis en Internet todo lo necesario. Seguro que encontráis mas paginas de herramientas, tutoriales y utilidades relacionadas con este tema que las que yo pueda deciros.

Con esto solo quiero fomentar vuestro interés, además se que la búsqueda os proporcionara gratas sorpresas.

A todos un saludo.

 

 

Con este capitulo adjunto las Cracker notes traducidas al castellano 

 

Capitulo 2

 

Victima

 

Fantom Begginer challenge (5 crackmes con distintas protecciones) Nivel principiante.

 

Herramientas

 

Olly Debugger

Intuición

 

Objetivo

 

Repasar la caza de seriales y tomar contacto con nuevos tipos de protección (NAGs, CD CHECKs).

Dejar claro el parcheo de saltos.

Seguir conociendo a Olly.

 

Al ataque

 

Lo primero agradecer al creador de estos crackmes su trabajo.

Seguiremos el orden de los crackmes del 1 al 4 y dejare el 5 para que lo destripéis por vuestra cuenta.

Como los pasos esenciales ya los vimos en el capitulo anterior este ira mas rápido.

 

Crackme 1  En busca del serial perdido

 

Tomemos este crackme como un repaso al capitulo 1.

Lo ejecutamos introducimos un password cualquiera y vemos

 

Te equivocaste…

 

Ya tenemos algo por donde empezar a buscar.

Cerramos el crackme y abrimos Olly.

Cargamos el crackme en el Olly y con click derecho Search for – All referenced text strings.

Vemos esto

 

Vemos todas las cadenas de texto del crackme y entre ellas la que buscamos

 

La cadena que buscamos Wrong Password! Keep trying, you´ll get it! Esta en la dirección 004012A2.

Nos fijamos también en otra cadena que nos dice You got it! Your now a cracker! En la dirección 004012B7

Doble Click izquierdo sobre la cadena Wrong Password! Keep trying, you´ll get it!

 

Aparecemos aquí

 

Encontrando nuestra cadena de texto. Esta parte del código es muy parecida al crackme del capitulo 1. En rojo las instrucciones que nos interesan

 

Analizando el código.

                             

                              CALL   00401291

                              CMP   00401296

                              JE    00401299 si es igual salta a 004012B0 que es donde debemos llegar para tener el crackme registrado.

             

      Nuestra String 004012A2 la cual tenemos que evitar.

 

Tenemos claro que nuestro objetivo es hacer aparecer el cartelito de registrado (You got it! Your now a cracker!)

Podemos cambiar en memoria el valor del salto JE por JNE y probar si cambiándolo salta el cartel bueno.

Vemos que si lo invertimos aparecemos registrados.

 

Recordamos lo visto en el capitulo 1.

Ponemos un Breakpoint en el CALL 00401291 (F2) y corremos el programa (F9).

Introducimos nuestro serial (15151515) y pulsamos el botón Check.

Olly se detiene en el CALL

 

Olly detenido en el CALL

 

 

Pulsamos F7 o Debug – Step into una sola vez para entrar dentro del CALL y ver que pasa ahí dentro

 

Dentro del CALL vemos nuestra cadena 15151515 y otra más que podría ser el serial correcto

 

Al pulsar F7 aparecemos en la  dirección 77E56432.

Pulsamos F8 y bajamos por las direcciones una a una (cada vez que pulsemos F8 avanzamos una línea de código) fijándonos en la ventana de Registros (derecha).

Como en el crackme del capitulo anterior vemos las cadenas falsa (la nuestra 15151515) y

                                                                                    la buena (el password correcto m0tNaF-EmKCARc).

 

Lo apuntamos, cerramos Olly, ejecutamos el crackme e introducimos el serial y…

 

serial correcto

 

Crackme registrado con el número de registro correcto.

 

Bien un  pequeño apunte aun a riesgo de ser pesado (que lo soy) pero en estos capítulos tenéis que tener las cosas claras para poder ir más ligeros después:

 

F8 Step over vamos examinando las instrucciones una a una sin entrar en CALLs.

F7 Step into vamos examinando las instrucciones entrando en los CALLs.

 

Cuando estemos parados en un Breakpoint y tengamos que “meternos dentro” para examinarlo pulsaremos primero y una sola vez F7 y

Continuaremos con F8 poco a poco y observando la ventana Registers en el Olly.

 

Esto nos servirá para crackmes que no canten tanto enseñando el serial a la primera de cambio como es el caso de estos dos primeros crackmes que hemos visto.

 

Para ver el serial bueno tendremos que utilizar F7 para entrar en el CALL y examinarlo con F8 instrucción a instrucción hasta ver en la ventana de Registers  la comparación de nuestro serial falso con el verdadero o alguna String que aparentemente pueda ser el serial correcto del crackme.

Esto se conoce como trazar o tracear.

 

Continuemos aprendiendo juntos.

 

Crackme 2   NAG NAG

 

Lo ejecutamos y vemos esto

 

Ummmmmmmmmmm…

Aceptamos y pasamos a ver esto otro

 

Otra NAG

 

El cometido de este crackme es enseñarnos a librarnos de esas dos ventanas llamadas NAG.

Os recordaran las advertencias o recordatorios de algún que otro programa comercial que tanto estorban cuando lo iniciamos.

Para solucionarlo necesitaremos nuestros pequeños conocimientos sobre saltos (espero que al menos sepáis que las instrucciones de salto están en el capitulo 0 y por supuesto en Google).

 

Cargamos el crackme en el Olly y buscamos las Strings

 

 

Vamos a la dirección 004010D2  Remove me!

 

 

 

En la imagen superior podemos ver las String de la NAG, un CALL ( 004010CB   marcado en rojo) y mas abajo en la dirección 004010FD el principio de otra sección de código.

 

El principio de las instrucciones Olly lo marca con el símbolo  >

 

Intuimos por lo que vemos que el CALL 004010CB llama a la creación de las NAGs pero no vemos ningún salto para poder pasar al principio de la siguiente instrucción donde intuimos que habremos pasado la zona de las NAGs.

Podemos intentar crear un salto que nos lleve donde queremos ir.

Habíamos visto dos tipos de salto JE saltar si es igual y JNE saltar si no es igual (saltos condicionales), ahora veremos JMP saltar siempre (salto incondicional).

 

Vamos a intentar cambiar ese CALL 004010CB  por un salto JMP (salta siempre) para llegar al principio de la siguiente instrucción y ver si no aparecen las NAGs como sospechamos.

 

Probemos, nos colocamos encima del CALL que creemos que llama a las NAG y doble click o click derecho – Assemble.

Aparece la ventanita de la imagen inferior con las instrucciones del CALL

 

 

Lo borramos y escribimos en ella JMP 004010FD (004010FD es el principio de la instrucción donde queremos saltar) desmarcamos la casilla Fill with NOP´s    y pulsamos Assemble el CALL cambia a JMP SHORT CRACKME2.004010FD

 

 

NOP (No OPeration)   quedaros con lo que significa de momento ya veremos los NOP mas adelante.

 

Vemos los cambios en memoria Hemos cambiado un CALL por un JMP

 

 

Corremos el programa (F9) y aparece esta ventana felicitándonos por haberlo conseguido.

 

 

 Hemos creado nuestro propio salto y el resultado ha sido el esperado: NAGs eliminadas

 

Lo hemos probado en memoria, ahora efectuemos los cambios en el ejecutable  

 

 

Aceptamos los cambios en el ejecutable como vimos en el capitulo1 y crackme resuelto.

 

 

Crackme 3  CD CHECK

 

Es la típica protección de algunos juegos, la famosa frase “no se encuentra el CD ROM”.

Ejecutemos el crackme y pulsemos en CD Check

 

Vaya por Dios…

 

Quedémonos con la frase Error finding CDROM.

 

Cerramos el crackme, abrimos Olly y buscamos la String.

 

Las tres instrucciones de siempre, vamos bien

 

La vemos y justo encima un CALL un CMP y un JE

Pues sencillo no ¿?

Invertiremos ese salto para que nos lleve a la zona buena 0040121D que es donde se llama al MessageBox que nos dice que encontramos el CD ROM

 

El CALL llama a la API GetDriveTypeA.

Mirad información en la red sobre las APIs de Windows. En las Cracker notes que acompañan a este capitulo tenéis las APIs de Windows mas frecuentes

 

 

 

Probamos con F9

 

Encontró el CDRom

 

Guardamos los cambios en ejecutable con Copy to executable – Selection y crackme resuelto.

 

 

Crackme 4  Nombre y Serial Number

 

Este crackme varia un poco sobre lo visto, aunque la base para resolverlo es la misma que la del crackme 1.

El crackme crea un serial distinto para cada nombre.

 

Ejecutando y probando

 

Parece que tampoco acertamos esta vez

 

Busquemos la String en el Olly mirando las Strigs references y vayamos a la dirección donde esta la cadena.

 

Vemos lo de siempre: LLAMADA - COMPARACION – SALTO (CALL- CMP- JE) justo antes del MessageBox malo.

 

Las Strings y los MessageBox con sus llamadas y saltos correspondientes

 

Pero aquí vamos a aprender una cosa que no habíamos visto en anteriores crackmes.

 

Antes hice un pequeño apunte: El principio de las instrucciones Olly lo marca con el símbolo >

 

Ahora veréis porque hice esta reseña.

Nos colocamos encima del comienzo de la instrucción 00401255 > que es la que genera la ventana de no registrados y pulsamos Control+R o click derecho Find references to – Selected command

 

 

Aparece esta ventana

En rojo vemos la dirección donde estamos o sea al principio de la rutina que llama a la MessageBox mala.

Encima la dirección de un salto condicional JE (si hacemos doble click sobre el nos llevara hasta el salto).

 

 

Bien, en estos crackmes sencillos y con pocas líneas de código se ve bien y se pueden seguir las instrucciones fácilmente y al lado de la cadena mala vemos el salto que nos manda hasta ella o que hace que la evitemos (el propósito de los crackmes es ese, para irnos familiarizándonos con el código), pero en crackmes mas avanzados o en programas comerciales a veces el salto que nos lleva a la zona de registrado o no registrado esta lejos y aunque localicemos la cadena mala no veremos el salto que nos lleva hasta ella.

 

Para eso tenemos Control+R o Find references to Selected command.

Traducción ratonil de Find references to Selected command =  Olly buscame desde donde se llama a esta instrucción.

 

En este caso buscamos desde donde se llama a la instrucción 00401255 que es donde se empieza a generar la ventana mala de no registrado y el Olly con Control+R nos dice que se la llama desde 0040123E.

Si nos desplazamos a JE 0040123E encontramos encima el CALL 00401236 Y el CMP 0040123B y vemos que ese es el salto que debemos cambiar (si queremos invertir el salto) o vemos el CALL donde debemos poner el Breakpoint para cazar el serial bueno.

 

 

Ponemos Breakpoint en el CALL para cazar el serial y ejecutamos el programa F9

Introducimos un nombre y un serial cualquiera y pulsamos check

 

 

Olly para en el CALL y entramos en el pulsando F7

 

Cuando estemos parados en un Breakpoint y tengamos que “meternos dentro” para examinarlo pulsaremos primero y una sola vez F7 y

Continuaremos con F8 poco a poco y observando la ventana Registers en el Olly.

Si ya se que soy pesado.

Seguimos examinando con F8 y llegamos a esta parte del código (00401310) donde el programa realiza unas operaciones para comprobar si el serial generado para nuestro nombre coincide con el que introdujimos en la ventana de texto (15151515)

 

 

Seguimos con F8 poco a poco y salimos del corchete donde se opera para generar el serial correcto para nuestro nombre y vemos que en string2 que se ha generado una cadena KVMJO  (ojo esta cadena se genero para mi nombre: ratón para vosotros será otra distinta según el nombre que introdujerais en la caja de texto)

 

 

Apuntamos la cadena que se genero y cerramos el Olly

Abrimos el crackme y probamos

 

 

Si probáis a introducir otro nombre y ese mismo serial veréis que os sale el cartel malo.

Un serial para cada nombre, algo distinto a lo visto en crackmes anteriores.

 

Bueno llegamos al final de este segundo capitulo.

 

Repasemos lo que hemos visto:

Buscar seriales correctos poniendo Breakpoints en los CALLs correspondientes basándonos en el texto que nos aparece en la ventana de no registrado.

Eliminar NAGs creando un salto a medida.

Saltarnos la protección CD Check invirtiendo saltos.

Buscar un serial específico para nuestro nombre poniendo Breakpoint en el CALL correspondiente basándonos en el texto que nos aparece en la ventana de no registrado.

Saber que pasa cuando tecleamos F7 y F8.

Encontramos la instrucción NOP.

Nos hemos fijado en la llamada de un CALL a una API de Windows.

 

En vuestra mano esta buscar información en la red sobre lo que no he explicado.

Intentad resolver los crackmes sin el tutorial.

Practicad con más crackmes.

Para el siguiente capitulo necesitaremos  DeDe, Peid y Olly.

De regalo tenéis el crackme 5 de Fantom que engloba todas la protecciones vistas en los 4 anteriores, con lo visto aquí debéis ser capaces de resolverlo.

               

 

Gracias

A todos los crackers y programadores de los cuales he aprendido y sigo aprendiendo.

A los creadores de crackmes

En especial y sin menospreciar a nadie a Ricardo Narvaja por su aportación y su trabajo sobre el estudio de las protecciones y sus tutoriales en castellano y a Makkakko por sus tutoriales con Olly Debugger (Recomendados 100%).

 

 

Ratón Enero 2004