Este crackme emula la protección de esos programas trial que pasado un cierto
número de días caduca y nos quedamos sin poder usar (a no ser que nos
interese y lo compremos).
Hacemos copia del crackme y del archivo DATA.DET. Muy importante hacer esto
en este capitulo
Analizamos con Peid y vemos que no esta protegido.
Ejecutamos el crackme y vemos esta ventana que nos dice que nos quedan 3 días
u ocho usos o ejecuciones del programa.
Si ejecutamos 8 veces el programa aparece un cartel avisando de que pasó el
periodo de evaluación, si adelantamos el reloj del sistema unos días aparece
el mismo cartel.
Lo cargamos en Olly y a buscar la String mala con las strings references, la
encontramos en la dirección 0040114D
Dos líneas mas arriba esta el principio de la instrucción (marcado con >)
en la dirección 00401146
Pulsamos Control + R estando encima de la dirección 00401146 para ver desde
donde se llama para que aparezca el cartel malo (sorry this crackme…) Y vemos
que hay tres saltos condicionales que nos llevan hasta la zona mala.
Vemos
los saltos que hacen aparecer el cartel Sorry… (marcados en rojo) Para ello
sobre la dirección 00401146 (marcada en gris) pulsamos Control + R
Los tres saltos nos envían a 00401146
Para crackear este programa usaremos un poco de intuición o imaginación.
El objetivo es evitar que los saltos nos envíen a la zona mala.
Primero vamos a evitar que cuando lo usemos más de 8 veces aparezca el
cartel.
Cerramos Olly.
Ejecutamos el programa 9 veces hasta que salga el cartel de tiempo expirado.
Abrimos Olly, lo cargamos y ponemos un Breakpoint (F2) en cada uno de los
saltos para ver cual es el que nos hace saltar a la zona mala cuando el
programa rebasa el límite de ejecuciones.
Run o F9 y el programa arranca e inmediatamente para en el primer Breakpoint
que pusimos
Primera
parada de Olly vemos que no toma el salto
Observamos lo que nos dice Olly en la parte inferior de la ventana de
ensamblado Jump is not taken = no hace el salto, por tanto no nos
lleva a la zona mala, por tanto ese no es el salto que debemos alterar para
evitar el limite de ejecuciones del programa.
Pulsamos F9 otra vez (una sola vez) para continuar corriendo el programa e
inmediatamente para en nuestro segundo Breakpoint
Segunda
parada de Olly vemos que tampoco toma el salto
Lo analizamos y vemos que tampoco toma el salto, este salto tampoco se
encarga del límite de ejecuciones
Pulsamos F9 otra vez (una sola vez) para continuar corriendo el programa e
inmediatamente para en nuestro tercer Breakpoint
El
salto si se cumple desde aquí, este es el salto del límite de ejecuciones
Aquí la cosa cambia vemos que el salto si es realizado al llegar a esta
instrucción nos dice Jump is taken así que si alteramos ese salto
evitaremos ir a la zona mala, a la zona en la que se llama a la MessageBox
con la frase Sorry this crackme has expired.
Encima del salto vemos CMP Al, 0 compara Al con cero y si es igual salta,
intuimos que en Al se va registrando el numero de veces que se ejecuta el
programa y cuando llega a cero se cumple la condición que pide el salto para
ejecutarse.
Tenemos que intuir e imaginar cuando no sabemos, por eso es interesante ir
viendo poco a poco el ensamblador (yo el primero) para ir sabiendo realmente
por que hacemos las cosas, aunque de momento nos baste con estas pocas
instrucciones.
El
resultado: si se ejecuta el salto vamos directos a la zona mala
Veremos donde nos lleva la imaginación en este caso
Cambiaremos el salto de la siguiente manera
Doble Click sobre la instrucción que vamos a cambiar 004010EB
Cambiamos JE SHORT 00401146 por JMP SHORT
004010FB para que salte siempre a 004010FB, para esto
pulsaremos doble clic izquierdo encima de la dirección 004010EB
Por que dirigimos el salto allí y no a otro lugar ¿?
Tenemos que evitar el salto y que el programa siga ejecutándose, podría haber
hecho que saltara a la siguiente instrucción dentro del código (004010ED) pero es
un DEC una operación de decremento, dos líneas mas abajo hay un XOR, otra
operación (Mirad las Cracker notas, por ejemplo el apartado crackear limites
de runtime, aunque deberíais leerlas completas), prefiero por instinto
evitarlas y me voy al sitio que me parece mejor para ubicar el destino del
salto: 004010FB un PUSH lo hago por que se parece bastante a un principio de
instrucción y evito las operaciones anteriores y espero que el programa se
desarrolle normalmente pese a saltarme esas operaciones.
Cambio como digo JE SHORT 00401146 por JMP SHORT 004010FB para que
salte siempre a 004010FB y pulso F9 a ver que pasa
Aquí
vemos la dirección cambiada y el resultado
Pues parece que acerté ya no sale el cartel malo y el programa se ejecuta
normalmente aunque queden 0 Sessions o ejecuciones del programa.
Esto se llama buscarse la vida.
Hacemos los cambios en el ejecutable con Copy to executable – Selection.
Ahora toca evitar que caduque pasados tres días
Cerramos Olly y avanzamos unos días el reloj del sistema, abrimos Olly
volvemos a abrir el ejecutable (ahora retocado)
Nos quedan dos saltos por analizar de los tres que nos llevaban a la zona
mala, pongamos Breakpoints en ellos y corramos Olly con F9
Para en el primero y observamos que al haber transcurrido más de 3 días el
primero de los saltos cumple la condición y nos envía a la zona mala
Si lo cambiamos evitaremos que el programa caduque a los tres días.
Vemos
que ahora el primer salto cumple la condición Para evitar el limite de días
debemos cambiarlo
Como antes nos dio resultado cambiaremos el destino de este salto al mismo
lugar del código que cambiamos el salto anterior.
mirad la imagen que sigue a estas líneas
Después de cambiarlo pulsamos F9 y ya no sale el cartel, nos quedan siempre 3
días y 8 ejecuciones según el cartelito pero realmente tanto las ejecuciones
como los días son ilimitados
Cambiamos
el destino de los saltos
Guardamos los cambios con Copy to executable Selection y ahora le damos un
nombre distinto al del ejecutable para identificarlo como parcheado como por
ejemplo: timetrial_con_saltos_cambiados.exe.
Lo hicimos.
Antes de seguir fijémonos en una cosa: este crackme viene acompañado de otro
archivo llamado DATA.DET del cual dije que hiciéramos copia al principio del
capitulo.
Abramos el DATA.DET que esta en la carpeta del crackme con el que hemos
estado trabajando para ver que contiene, lo abrimos con el bloc de notas, en
mi caso veo esta línea.
Abramos el DATA.DET que esta en la carpeta del crackme original (la copia que
siempre nos reservamos) con el que no hemos trabajado para ver que contiene,
lo abrimos con el bloc de notas, vemos esta línea parece que no hay nada pero
fijaros hay espacios y un `
Si después de pasado el periodo de prueba hubiéramos sustituido el archivo
DATA.DET que teníamos en la carpeta del crackme por la copia original
habríamos vuelto a tener el programa con otros tres días u ocho ejecuciones.
Probadlo si queréis.
Este apunte es para que tengáis en cuenta que algunos programas pueden necesitar
de otros archivos a la hora de comprobar vuestro registro.
Lo veremos en siguientes capítulos.
Patch FX
Tenemos ahora dos ejecutables, el original: timetrial.exe y la copia con los
saltos cambiados:
timetrial_con_saltos_cambiados.exe (crackeada)
Vamos a ver una forma fácil de hacer un crack como los que algunos piratones
hacen para programas comerciales (nosotros somos buena gente y nunca haremos
esto).
Abrimos Patch FX
Patch
FX ventana principal
En la ventana principal (Required information) pulsamos original file y
cargamos el crackme original timetrial.exe
Cargando
el original
En la ventana principal pulsamos Cracked file y cargamos el crackeado por
nosotros timetrial_con_saltos_cambiados.exe
Cargando
el parcheado
Le ponemos nombre a la ventana del crackme (Windows title) y una pequeña
descripción
Detalle
de la ventana decription
Pasamos a la ventana Optional information y en Patch filename ponemos el
nombre que queremos darle a nuestro crack y si queremos un icono y una imagen
(debe de tener unas medidas, el mismo programa os informa de ello), también
se puede incluir un readme.txt
Para ver el resultado del este ejercicio nos bastaría con rellenar solo la
Required information.
Creamos
el parche (crack) a nuestro gusto
Cuando este a nuestro gusto pulsamos el botón Generate EXE y aparece este
cartel que aceptaremos pulsando SI
El
momento de creación del crack o parche
Patch FX ha creado el crack y lo ha guardado en la carpeta donde tengáis el
programa Patch FX
Lo buscamos, lo copiamos a la carpeta donde tenemos nuestros crackmes y
ejecutamos timetrial.exe
El
día de hoy primera ejecución del programa
A DIA de hoy funciona, pero si cerramos el programa y adelantamos un mes el
reloj cuando lo volvemos a ejecutar aparece el cartel malo
Viaje
en el tiempo
Cerramos el programa y ejecutamos el crack Timetrial_crack.exe (es el nombre
que yo le di al crearlo con patch FX, podéis ver que tiene el icono que le
indique al programa y en la ventana aparece el nombre y la foto que escogí al
crearlo con Patch FX) lo aplicamos sobre el timetrial.exe original
OK
OK OK
Nos dice que todo OK, comprobémoslo, pulsamos Quit para cerrar nuestro crack
y abrimos el ejecutable original timetrial.exe
Mirad la fecha del reloj lo hemos parcheado con éxito, hemos creado nuestro
primer crack.
Programa
crackeado con éxito utilizando nuestro propio parche
Miramos al cielo y damos las gracias al creador de este programa al menos 10
veces (opcional)
Explicación ratonil del funcionamiento de Patch FX:
Este programa funciona haciendo una comparación entre los ejecutables, el
original y el parcheado “ve” los bytes alterados y “se lo monta”
para hacernos un programita que cuando lo ejecutemos cambie esos bytes en el
programa original.
Advertí que la explicación era ratonil.
Dentro de vosotros el lado oscuro a revelarse empieza, tranquilidad jóvenes
padawans.
Un problema que podáis tener en este capitulo puede ser confusión con el
nombre del crackme original y el parcheado o el cambio de fecha al jugar con
el reloj.
Bueno, fin del capitulo cuarto.
Hemos analizado un nuevo tipo de protección y hemos aprendido a hacer un
crack para poder aplicarlo a nuestros programas.
Esto a los programadores les viene muy bien para actualizar las versiones de
sus programas sin necesidad de tener que distribuir el programa completo.
La coña de siempre: practicadlo sin el tutorial.
Leed los documentos de apoyo adjuntos al curso, os ayudaran a comprender
mejor el tema.
|