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 1En 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 ladirecci�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 unpeque�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 Registersla 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 004010D2Remove 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 3CD 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 4Nombre 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 necesitaremosDeDe, 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