pues a mi no me sale la nag, con
OnExeModified=Nilpuede que la nag se genere tambien dependiendo de otros factores que existan en cada instalación.
¿que como he llegado alli?, pues en este caso fue muy facil ...
con el RDG Packer o Peid, nos dice que está hecho en Delphi.
como es Delphi, con el DeDe ó con E2A2 podemos ver donde comienzan las direcciones de los eventos de los
formularios, tambien vemos que hay un formulario principal con el nombre TfrmMain (en programación de
delphi se le suele poner el nombre Main al formulario principal que es con el que se inicia el programa),
asi que vamos a empezar a tracear en el evento FormShow del formulario Main, que es cuando se muestra en
pantalla.
La direccion donde comienza el evento FormShow del TfrmMain, en este caso es en 0062F364
Abrimos el programa con Olly, pulsamos Control+G para ir a la direccion 0062F364, alli ponemos un bp con
F2, para que se detenga en dicho lugar cuando lo ejecutemos con Run F9
además vamos a mirar el código que hay por ahí; mas abajo vemos que hay un mensaje en inglés que
traducido nos dice "Base de datos para los valores materiales no se establece.", lo cual no nos ha
mostrado ni siquiera anteriormente,al correr la presunta versión sin registrar, y para llegar a dicho
mensaje ó no pasar por dicho lugar hay un par de comparaciones que deciden el resultado de sendos saltos
condicionales, por lo que seria interesane echarles un ojo, ya que con la primera comparación, si salta
se envita realizar la segunda que es la que te puede llevar al mensaje de error al cargar la base de
datos, por lo que intuyo que al producirse el primer salto se evita la zona donde se carga la base de
datos y por eso ya no se muestra ni siquiera el mensaje de advertencia, asi que le ponemos unos BP en
las comparaciones previas y en los saltos para ver que valores compara y según el resultado la decisión
que toma para saltar a un destino distinto según el caso.
en el momento de la comparación del valor que hay en AL con el valor 2, vemos que AL=00 por lo que con el
JNZ se produce el salto que queremos evitar,
¿donde toma AL el valor 00, pues lo mas seguro en el último CALL previo, que nos lleva a la dirección
0059883C, donde vemos que se mueve a EAX el valor que existe en la dirección de memoria DS :[011377F9]
Entonces sabemos que si conseguimos que en la dirección de memoria 011377F9 en el momento previo a la
comparación que se introduzca el valor 2, el programa cargará la base de datos.
Despues de reiniciar un par de veces el programa y detenerse con el Breakpoint puesto en dicho evento
comprobamos que la dirección de memoria siempre es la misma, asi que reiniciamos de nuevo y vamos a
detenernos en la entrada del formulario, es el momento de poner un BP Memory On Write, en el primer Byte
de la direccion de memoria 011377F9, al que nos trasladamos pinchando en la zona del Dump y Control+G,
después damos a Run F9, y comprobamos que el Olly se detiene una primera vez en 005A2D00 para mover el
valor 00 a dicho lugar de memoria,
pero vamos a dar de nuevo F9 para continuar y comprobar si hay mas veces que se sobreescriba en dicho
lugar antes de llegar al codigo de comparación, lo cual si ocurre una segunda vez, por lo que elijo
modificar el valor en la segunda vez que mueve el valor 00 a dicho lugar de destino, y lo cambiamos por
02 que es el bueno, ya que en el primer movimiento lo perderiamos machacado por el segundo.
Ya solo queda salvar los cambios en el ejecutable, y probar el resultado.