Ayuda para crackear software (parking manager) con OLLYDBG

Iniciado por elias_aa5, 6 Julio 2010, 06:42 AM

0 Miembros y 1 Visitante están viendo este tema.

elias_aa5

hola gente necesito ayuda por que estoy intentando crackear un programa llamado parking manager aca dejo el link http://www.micronet-software.com/parkingmanager_es.htm. lo estoy intentando con el OLLYDBG el programa cuando lo abris obveo que dice no registrado pero te deja usarlo pero tiene un contador de ejecuciones que a las 30 creo no se puede abrir mas agradeceria cualquier aporte ya que es de suma importancia, gracias...

MCKSys Argentina

Hola!

¿Hasta dónde has llegado con Olly?

Recuerda que no puedes pedir cracks! (pero podemos ayudarte si te trabas) ;)

Saludos!
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


elias_aa5

hola amigo, la verdad estoy empezando a hacerlo con el olly pero el drama que no por donde tengo que empezar osea no se si tengo que buscar en el olly el tema del contador de ejecuciones o el tema de la licencia me podrias ayudar yo lei el curso de narvaja

tena


Иōҳ

#4
Cita de: elias_aa5 en  7 Julio 2010, 19:30 PM
hola amigo, la verdad estoy empezando a hacerlo con el olly pero el drama que no por donde tengo que empezar osea no se si tengo que buscar en el olly el tema del contador de ejecuciones o el tema de la licencia me podrias ayudar yo lei el curso de narvaja

Si leistes los 48 tutos de iniciandome en el cracking y no sabes por donde empezar?  :huh:

Seguro que el conteo que mencionas es por no tener la licencia y ella desapareceria si la tubieras verdad, o me equivoco?...

pienso que si te vas hacia el tema de contador puedes poner un numero indeterminado o hasta nopear dicha sección, ahora si te vas a la licencia y llegas a registrar no tendrias problemas con el contador -supongo, almenos que hay licencias que te den un numero mayor, pero con tope  :-\ y de hecho que irias por el contador- asi que depende de como sea el caso, aunque yo diria primero que te fijes si esta enpacado, y en que lenguaje fue desarrollado la aplicación.

pd: Espero no haberte confundio  :xD

Salu2!
Eres adicto a la Ing. Inversa? -> www.noxsoft.net

LSL

#5
Bueno, el programa parece que no tiene ventanita de registro, por lo menos en el periodo de prueba, pero si te lleva a la pagina de pago para adquirirlo, pero que lastima la pagina no existe, asi que si por ahora no puedes contribuir a su mantenimiento, intenta confundirlo y que crea que está registrado.

Lo mas fácil, es con el ollydbg, estando detenido en el EP, buscarle en las string referencias, el texto que muestra normalmente para decirte que no estás registrado, por ejemplo NOT REGISTERED, una vez encontrada todas las cadenas con dicho texto, le pones a cada una un BreakPoint con la tecla F2, ahora lo corres con F9 y cuando te pare en alguna de ella, mirate en el codigo donde se encuentra el salto que evita pasar por dicho código, antes del salto tiene que haber una comparación de un valor fijo con algun valor guardado en alguna dirección ó constante, (si el valor es el apropiado salta y si no pues directo al mensaje), asi que una vez encontrada la comparación que decide si se ejecuta el salto ó no, le pones otro BP con F2 en dicha comparación y reinicias el programa (Control+F2), lo corres de nuevo y cuando se detenga en la comparación, ahí te fijas que valor tiene la dirección de la constante y por que valor compara, por ejemplo si la constante tiene el valor FFFF y lo compara con 0, ya sabes que la constante tiene que tener el valor 0 para que el programa sepa que está registrado.

Ahora tienes que buscar con la opción "Find references to Address constant", mas lugares donde se hace referencia a la dirección de la constante y que se le mueva el valor que ya sabemos que es el de chico bueno y el de chico malo, fijandonos en especial en los lugares que se mueve el valor 0 a la constante, que ya sabemos que es el valor bueno, y como el programa hace alguna comparación para saber que no está registrado y saltarse el lugar de chico bueno, ahi es donde entramos a modificar lo necesario para que la comparación sea por el mismo valor de comparación, y tener el programa en versión "Illimitata".

saludos.
Saludos.

LSL.

gastonp

Hola elias_aa5, para registrarlo tenes que hacer tal como te dijo LSL. Busca las cadenas de texto y vas a ver lo siguiente:

005FDEEC PUSH ParkingM.00424D90   UNICODE " (NOT REGISTERED)"
005FDF79  PUSH ParkingM.00424DB8   UNICODE " (REGISTERED)"

Si vas a la dirección 005FDEEC y subis un poco en el código vas a ver el siguiente salto:


005FDE72      .  FF15 5C104000  CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeOb>;  MSVBVM60.__vbaFreeObjList
005FDE78      .  8B1D 90A17100  MOV EBX,DWORD PTR DS:[71A190]
005FDE7E      .  83C4 44        ADD ESP,44
005FDE81      .  66:833D ECA071>CMP WORD PTR DS:[71A0EC],0
005FDE89      .  0F84 8D000000  JE ParkingM.005FDF1C


Ahi ves como compara el valor almacenado en 71A0EC (que es 0FFFF) con 0 y si son iguales te lleva a REGISTERED de lo contrario va a NOT REGISTERED.
Despues seguis como te dijo LSL, "Find references to Address constant" o pones un Hardware Breakpoint on Write en esa dirección de memoria y ves cuando escribe el valor 0FFFF para cambiarlo por un 0.
Saludos





LSL

pero si afina un poco mas con lo expuesto en el tercer párrafo, es el propio programa el que se encarga de poner el valor 0, además de otros valores que lo hacen ilimitado ("Illimitata" teniendo en cuenta que el programa es italiano) ;)
Saludos.

LSL.

gastonp

En la primera referencia en la que mueve un 0 a [71AEC] se puede ver que habla de "Illimitata", la verdad que ni me habia fijado (yo tambien soy nuevo en esto).

Llendo hacia atras desde ese punto tuve que cambiar el salto de la dirección

00706414 JLE ParkingM.007064F9
por
00706414 JMP ParkingM.007064F9

para llegar al procedimiento que comienza en 00706550 (Illimitata) y luego cambié el "PUSH ParkingM.004308C0" de la linea 007065A2 por "PUSH EAX" para que compare por el mismo valor como vos bien dijiste. Despues de eso el programa mueve un 3 a una dirección de memoria y un 0 a [71A0EC] dejandolo registrado.

¿es asi como lo hiciste LSL?


LSL

Cita de: gastonp en 10 Julio 2010, 22:52 PM
En la primera referencia en la que mueve un 0 a [71AEC] se puede ver que habla de "Illimitata", la verdad que ni me habia fijado (yo tambien soy nuevo en esto).

Llendo hacia atras desde ese punto tuve que cambiar el salto de la dirección

00706414 JLE ParkingM.007064F9
por
00706414 JMP ParkingM.007064F9

para llegar al procedimiento que comienza en 00706550 (Illimitata) y luego cambié el "PUSH ParkingM.004308C0" de la linea 007065A2 por "PUSH EAX" para que compare por el mismo valor como vos bien dijiste. Despues de eso el programa mueve un 3 a una dirección de memoria y un 0 a [71A0EC] dejandolo registrado.

¿es asi como lo hiciste LSL?



Si, es la solución para la versión de registrado, pero si te fijas, un poco más



el valor que se mueve a EAX para luego compararlo con el de la dirección fija de 4308C0, es el valor que se encuentra en la dirección 71A0F4, y ahí es donde deberiamos tener el mismo valor que hay en 4308C0 para que la comparación posterior devuelva en EAX el valor 0, para que en el TEST EAX,EAX al ser igual a  0 active el flag Zero con 1 y esto produzca el salto JE.

Por qué hay que fijarse en esto ?.
Porque si buscamos mas lugares donde se utiliza el valor que debe tener en la dirección 71A0F4 para realizar otras posibles comparaciones o utilizarlas en el codigo del programa, vemos que existen y tambien tendriamos que arreglar él resto de ese código para no tener problemas mas adelante.



Así que vamos a aprovechar el lugar donde nos encontramos, para matar varios pajaros de un solo tiro.
Para cambiar el código de un programa tenemos que tener cuidado de no machacar código necesario para la ejecución correcta del mismo, y como necesitamos algo mas de lugar para mover valores entre dos direcciones fijas, vamos a utilizar parte del lugar que ocupan los bytes del codigo de la api de comparación, que realmente no nos hace falta ejecutarla, pues ya sabemos lo que el programa necesita, así que vamos a modificar el código para mover a la direccion 71A0F4 el valor de la dirección 4308C0 que es el que deberiamos tener en caso de estar registrado en versión ilimitada, NOPeamos la llamada a la función de comparación que ya no nos sirve y además esta incompleta en cuanto a valores suministrados, y ademas vamos a poner a 0 el valor de EAX y activar el flag Zero para que se produzca el salto JE, (estos tres pasos lo obtenemos siempre con un simple XOR, en vez del TEST),






Saludos.

LSL.