PROGRAMA

      

PROTECCION

     

HERRAMIENTAS

TIME TRIAL DETTEN

DESCARGA

 

Sin protección

 

Olly Debugger

Patch FX

 

 

 

 

 

     NIVEL: Cavernícola

 

 



Aprender el manejo básico de herramientas nuevas: Patch FX
Evitar que un programa caduque por límite de tiempo.
Crear un parche o crack para ese programa



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.

Capitulo siguiente

                                                                                                 


Febrero 2004

Pagina oficial del curso

 

Gracias a ...