Digamos
que restringimos un programa a un uso limitado (e.j.
25 usos) antes de que el programa se
'desactive' . Así que lancemos el
programa y observa la caja de diálogo que
educadamente te informa de cuántas veces has
ejecutado el programa, sólo relanza el programa
unas cuantas veces más para tener una
percepción de lo que está pasando.
Aproximación zen aquí (como con los ensayos
de tiempo) siente cómo este código podría
llevarse a cabo (e j. 19h = 25 dec). Quizá
husmea con el editor HEX para algunos probables
bytes - sin embargo un desensamblaje
probablemente será tu mejor acercamiento (
espero que recordaras el texto en esa caja de
diálogo). Debes localizar fácilmente algo
así dentro de W32DASM:
CMP BYTE PTR [004628D4],00 <--Comprueba la 1ª vez que el programa es ejecutado
JZ 0045B7D9 <--Salta la 1ª vez ejecutada
CMP DWORD PTR [004628D8],1A <--Comprueba las veces ejecutadas (1A = 26dec)
JGE 0045B72A <--Salta si eres un chico malo
En
este esquema debes ver fácilmente nuestros 2
flags importantes, 004628D4 decide si esta es la
primera ejecución del programa, donde el número
de veces que el programa se ha ejecutado se
marcará como 004628D8.
Nota que el programa compara el número de veces
ejecutadas con 26 en decimal, un truco menor para
engañar nuestra búsqueda HEX.
Debes poder ver muchas maneras de anular este
esquema, podrías conformarte, por ejemplo, con
aumentar 1A (26) digamos a FF (255), esto es un
cambio bastante débil pero puede ayudarte
totalmente a evaluar el programa, o puedes "NOPear"
el JGE 0045B72A, eso anularía el control de 26
veces de ejecución completamente, o quizá
podrías forzar el JZ 0045B7D9 a un JMP.
¡Haz el parche que mejor te sirva!
La mayoría de los esquemas de limite de
'runtime' son similares en funcionamiento a este
y son contadores de situación normalmente
bastante débiles
(aunque a veces los programas pueden
incrementar un contador escondido dentro del
archivo del programa o en una DLL), debes
prestar particular atención a direcciones que se
usan como flags y a como éstas puede ser
potencialmente malévolas y debes de estar muy
seguro de verificar que eso no sea una dirección
espejo que verifica el mismo flag.
|