Foro de elhacker.net

Programación => Ingeniería Inversa => Mensaje iniciado por: jlargo en 6 Marzo 2005, 19:31 pm



Título: Crakeo de un programa que se desactiva por tiempo
Publicado por: jlargo en 6 Marzo 2005, 19:31 pm
Primero Hola a todos:
Segundo, espero que este sea el lugar indicado para esta pregunta, y además que sea el foro adecuado.

El problema es el siguiente:

Estoy intentando realizar un programa que utiliza una dll, funciona correctamente hasta que al los 30 min se desactiva. Si adelanto el reloj manualmente tambien se desactiva, y si lo pongo dentro de ese rango se vuelve a activar. Por tanto queda descartado que sea un interrupcion que a los 30 minutos me genere un codigo de desactivacion. Por otra parte creo que siempre compueba la hora del sistema y si es una hora despues de su inicio deja de funcionar.
La dll la he desensamblado y he encontrado 3 Set timer siempre iguales:

:1001E31C 50 push eax
:1001E31D 6A00 push 000
:1001E31F 6A00 push 000
:1001E321 FF1560530310 call dword[10035360 ->0003CABC SetTimer]
;;call USER32.SetTimer

Alguien me puede indicar como desactivar este timer o poner un tiempo "infinito", o guiarme por donde tengo que buscar.

Gracias de antemano
JLargo



Título: Re: Crakeo de un programa que se desactiva por tiempo
Publicado por: 4rS3NI( en 7 Marzo 2005, 23:34 pm
Buenas, si te fijás en el winapi vas a ver que lo que hace la función es lo siguiente

UINT SetTimer(

    HWND hWnd,                       // handle de la ventana donde se enviaran los mensajes del temporizador
    UINT nIDEvent,                      // Identificador del temporizador
    UINT uElapse,                      // tiempo de espera en milisegundos
    TIMERPROC lpTimerFunc     // dirección del proceso que el temporizador ejecutará al alcanzar el tiempo de espera
);

como los datos se pasan a la pila al revés, ese push eax será el identificador del temporizador, de lo cual deducirás que la instrucción anterior son los 30 minutos en milisegundos. Lo que tenes que hacer, es convertir tus 30 minutos en milisegundos, comprobar para asegurarte de que el temporizador sea el correcto, y si lo es, nopear (poco elegante pero bueno  :P) el call a settimer y los 4 pushes anteriores para que no se te casque el programa por la pila. También podrías buscar algun salto mágico que te evite el timer, o meterlo vos justo antes de la funcion, en fin, a tu gusto

Saludos!



Título: Re: Crakeo de un programa que se desactiva por tiempo
Publicado por: bureba en 8 Marzo 2005, 04:40 am
Otra forma es poner un push FFFFFFFF como primer parámetro. FFFFFFFF es bastante tiempo y te puede servir.

Saludos