Problemilla con un trial.

Iniciado por nemus, 27 Agosto 2010, 13:58 PM

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

nemus

En primer lugar un saludo a tod@s.

Comentaros  que llevo tiempo siguiendo las interesantes aportaciones de este foro. Aunque me considero en estos temas un opositor a aprendiz, sin demasiado tiempo para dedicarle al estudio. El periodo de vacaciones del verano pasado continué mis estudios practicando con el desempaquetado  de un programa.  Estas vacaciones me había propuesto vencer sus limitaciones, pero  llevo 4 días encallado. Hecha mi presentación voy a describir mi problema.

Una vez  desempacado el trial decido estudiar sus limitaciones.

El programa permite uso full durante el período de 90 días. Pasada la fecha solo posibilita el uso de un reducido número de funciones.

Inicialmente cuando se carga aparece una NAG informativa que nos indica la fecha máxima del uso en modo full. Es decir, la comparación de fechas ya se ha realizado. Al aceptar la NAG informativa aparece otra ventana preguntando que base de datos queremos cargar. Aparecen un par de bases de ejemplo una vacía y otra con datos, son archivos con extensión  .fdb  (base de datos firebird, ...)
Mi teoría es que compara la fecha del archivo .fdb o alguna  clave de registro, con la fecha del  sistema.

He intentado con:

GetSystemTime
SystemTimeToFileTime
GetSystemTimeAsFileTime
FileTimeToLocalFileTime

FileTimeToDosDateTime:   Con esta API para al escoger el .fdb, pero a partir de ahí me marea y me pasa por alto la comparación.

Ahí tenéis el programa y su dump:  http://www.megaupload.com/?d=Y25QMRFI

Espero podáis echarme una mano antes que se acaben mis vacaciones, gracias por anticipado.

Mintaka

Hola:
A mí personalmente, me gusta hallar la call que provoca la nagscreen y lo consigo mediante el método llamado "a lo retro".Este método consiste en colocar un breakpoint en el Olly (BP DestroyWindow) antes de cerrar esa nag.Cuando la cierras Olly detiene la ejecución justo cuando entra en el procedimiento de borrar la nag.Seguidamente de doy a ALT+F9 y me deja parado una instrucción después de la call para sacar la nag cojonera.A partir de ahí hay ir observando hacia atrás, en el código, y colocar breakpoints en los lugares sospechosos que te llevan a la esa call maldita.Reiniciar Olly e ir observando que sucede a partir de esos BP's y si es preciso retroceder más en el código para descubrir donde descuenta los días.A veces es tan simple, como ver una resta a 5A (90 decimal).
De todos modos, existen bastantes escritos sobre las nags por aquí:

*http://ricardonarvaja.info/WEB/CURSO NUEVO/TEORIAS NUMERADAS/*:

816-Quitando nagscreen en vb.zip

838-COMO_ELIMINAR_NAGS_EN_PROGRAMAS_DELPHI.rar

834-Registrando Secutity Task Manager por ZiKaTRiZ.rar

323-Desempacado y quitando la nag de Soldat v1.21 (ASPr v1.2).rar

932-Parcheando y quitando NagS a un EXE por CaR19.rar

1012-Teoria sobre como eliminar un NAG con nada mas mirrar la pila.rar

177-COMO HACER UN LOADER SENCILLO QUE PULSE BOTONES PARA ELIMINAR NAGS.rar

115-OLLY_Contra_NAG_Parte_III.zip

200-Como realizar un injerto para eliminar una nag simulando que se presiona el boton .rar

100-OLLY_Contra_NAG_Parte_II.rar

095-OLLY Contra Las NAG Parte I por Arapumk.rar

*http://ricardonarvaja.info/WEB/OTROS/AKIRA TODO/*:

35.Estudio completo de Nag Screen.rar

Suerte,

Mintaka

PD:A ver si se despierta el amigo Tena y te da sus consejos.
Si lloras por no ver el Sol tus lágrimas no te dejarán ver las estrellas.(Tagore)

nemus

Primero dar las gracias a Mintaka por su interés en ayudarme.

Una vez finalizado el repaso a los tutoriales sobre la destrucción de NAGs , la conclusión es que me ha ayudado a confirmar mas mi sospecha.

El ocultar (jumpear) la NAG inicial, confirma que la fecha de final de periodo que en ella aparece no es significativa, solo informativa.  Es decir, al jumpear la NAG el programa ya no compara la de fecha para mostrarla  y por lo tanto la fecha que aparecía en ella solo se comparaba para mostrarla de manera informativa. Esto verifica que la fecha de NAG informativa no interviene en la validación de fechas .

En cambio,  la segunda NAG que aparece en la cual nos ofrece la posibilidad de escoger la base de datos (archivo .fdb) a cargar, es la que en alguno de sus CALLs previos se encarga de comparar la fecha con alguna  clave de registro, o con la fecha del  sistema.

He intentado con:
RegQueryValueExA
RegCreateKeyExA:  A través de esta API he descubierto que pasados los 90 días modifica una clave situada en "HKEY_CURRENT_USER\Software\Microsoft\MSInfo" esta clave durante el periodo full contienen el valor 0, y finalizado el periodo lo cambia a 1. Una vez modificado el valor el programa oculta el acceso a parte las funciones del modo full del programa. Dejando al programa solo con las funciones free.
RegSetValueExA
RegOpenKeyExA
RegClosedKeyExA

Sigo perdido, pero luchando!  :)

Preparado para nuevas sugerencias solo me quedan 5 días de vacaciones. :-(

Una ayudita! Thanks.


Paul Young

que tal compaéros

pues yo no se mucho (casi nada) de esto pero me interesa mucho el ver que con el olly se pueda hacer en base a break points que algun programa (trial) se pueda ejecutar como full

es posible?? :huh:
Lo que sabemos es una gota de agua, lo que ignoramos es el océano
(Isaac Newton)


nemus

Hola peke2305,

En este caso en concreto el programa tiene parte gratuito y otra parte a prueba temporal de 90 días. Se instala con todas las funciones disponibles y una vez superado el período de evaluación dejan de funcionar las funciones de evaluación y solo permanecen activas las funciones gratuitas.

Si un programa no trae todas las funciones, entonces no hay nada que hacer en ingeniería inversa, ya que no podemos activar unas funciones que no están en el programa. En ese caso estaríamos hablando de programar en Olly las funciones que faltan en lenguaje ensamblador(ASM), tarea fuera de toda lógica teniendo en cuenta el numero de lenguajes de alto nivel que disponemos para programar.

Espero que mi explicación no te confunda mas. Sino seguro que los maestros lo enfocaran mejor.



Sigo todavía en juego. Por ahora he topado con un salto que evita entrar en el CALL que modifica el registro de sistema comentado en el post anterior, me he acercado a la zona con el API RegSetValueExA. Pero sigo a oscuras en el tema de la comparación de fechas. Alguna sugerencia, please!



Mintaka

Cita de: nemus en 31 Agosto 2010, 22:21 PM
.......
RegCreateKeyExA:  A través de esta API he descubierto que pasados los 90 días modifica una clave situada en "HKEY_CURRENT_USER\Software\Microsoft\MSInfo" esta clave durante el periodo full contienen el valor 0, y finalizado el periodo lo cambia a 1. Una vez modificado el valor el programa oculta el acceso a parte las funciones del modo full del programa. Dejando al programa solo con las funciones free.
RegSetValueExA
RegOpenKeyExA
RegClosedKeyExA

Sigo perdido, pero luchando!  :)

Preparado para nuevas sugerencias solo me quedan 5 días de vacaciones. :-(

Una ayudita! Thanks.[/size]


Bueno.¿Qué tal si averiguas en que parte del código intenta cambiar ese valor a 1?.
Y sabiéndolo, ¿porqué no cambiar ese valor 1 que quiere ponerle, por un cero?.
He intentado bajarme el programa y me dice que:

El archivo al que está intentando acceder está temporalmente desactivado

Animo que estás más cerca.
Si lloras por no ver el Sol tus lágrimas no te dejarán ver las estrellas.(Tagore)

nemus

Cita de: Mintaka en  1 Septiembre 2010, 22:03 PM

Bueno.¿Qué tal si averiguas en que parte del código intenta cambiar ese valor a 1?.
Y sabiéndolo, ¿porqué no cambiar ese valor 1 que quiere ponerle, por un cero?.

He intentado bajarme el programa y me dice que:
El archivo al que está intentando acceder está temporalmente desactivado



La Nag inicial y la parte de escritura de la clave del registro esta arreglado.

El programa arranca sin la nag informativa y solo me pregunta que archivo de datos quiero cargar. Cuando el archivo de datos .fdb elegido tenia fecha posterior a la permitida entonces es cuando escribía el 1 en la susodicha clave de registro. Al jumpear el momento de escritura en la clave, el programa detecta la fecha incorrecta pero no puede escribir en el registro el valor 1, por tanto el programa permite el uso full dentro del período permitido con un archivo de datos con fecha fuera de los limites permitido.

Sigue quedando la limitación por fecha, si esta limitación la hubiera solucionado en primera posición, el resto de limitaciones no aparecerían. Estoy en el estudio de los métodos de como oculta la fecha.

Por cierto, a mi si que me funciona la descarga del archivo que  contiene el programa y el dump desempacado.

Si tienes tiempo y ganas echale un vistazo, mientras lo intentaré acabar.

Saludos.

nemus

Me estoy volviendo loco! Pensaba que estaba cerca y la cosa se ha complicado. Al invertir un salto me ha bloqueado nuevamente el programa, y no se que registro me ha modificado. He restaurado el registro y he vuelto al estado anterior.

Si instaláis el programa con la fecha actual sale una nag indicando que el programa esta fuera de fechas y se cierra.

En cambio se deja instalar con fecha aproximada a junio/2009. Entonces permite 90 días full. Mi objetivo era conseguir que el programa estuviera siempre en período de prueba.

Estoy sin ideas. :-[

Domingo noche empiezo a trabajar, y adéu a las vacaciones.  :-(

Una ayudita no estaría mal, venga no me hagáis suplicar mas. :-)

Thanks.

MCKSys Argentina

MCKSys Argentina

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


nemus

#9
Cita de: MCKSys Argentina en  3 Septiembre 2010, 19:58 PM
En que esta hecho el EXE??

Estaba empaquetado con Yoda's Protector


y desempaquetado  Borland C++ for Win32 1999

Gracias.