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