PDA

Ver la Versión Completa : Almacenar valor en ejecutable en tiempo de ejecucion


galmacland
11-06-2006, 04:15:39
Hola, quisiera saber si esto se puede hacer, imagino que si, teniendo en cuenta que los limites de la programacion estan en lo que sepas hacer. ahi va mi duda:

como haria para que el codigo de la aplicacion se modificara en tiempo de ejecucion, por ejemplo, durante la ejecucion de una aplicacion entrar un valor que permanezca en el codigo y compilado, a menos que nuevamente sea alterado el mismo. tipo cuando se registra un programa con un serial. se que se puede hacer almacenando la informacion en el registro, en algun archivo externo, pero queria saber si se podia hacer en el mismo ejecutable con solo insertarlo una sola vez...
:confused: :confused: :confused: :confused: :confused:
gracias por las sugerencias por adelantado...:p

dec
11-06-2006, 06:31:23
Hola,

Lo que dices puede hacerse (que yo sepa, por ejemplo) mediante el uso de archivos de recursos. Concretamente haciendo uso de un recurso del tipo "RT_RCDATA".

Los pasos ha seguir serían los siguientes:
Crear un archivo de recursos con al menos uno de tipo "RT_RCDATA" con un programa como XN Resource Editor (http://www.wilsonc.demon.co.uk/delphi.htm)
Nombrar dicho recurso de manera que después podamos identificarlo claramente.
Incluir en el ejecutable el archivo de recursos creado mediante la correspondiente directiva para el compilador.
Actualizar el contenido de dicho recurso mediante las funciones BeginUpdateResource, UpdateResource y EndUpdateResource.Algunas cosas a tener en cuenta son:
No podemos (yo no sé cómo) eliminar el recurso del ejecutable, es decir, si su contenido aumenta, el peso del ejecutable lo hará en proporción: aunque luego "borremos" el contenido del recurso el mismo ocupará el espacio "máximo" ocupado previamente.
El contenido del recurso se guarda "en claro" en el ejecutable. Con el programa mencionado anteriormente, por ejemplo, podría accederse al contenido del recurso.
El ejecutable no podrá ser comprimido, al menos no con UPX (http://www.upx.org/) (Ultimate Packer for Executables), que es con lo que lo he intentado. Si se comprime el ejecutable este se corromperá si actualizamos el recurso de marras.
No es posible actualizar un recurso de un ejecutable en uso, esto es, no es posible (que yo sepa) actualizar el recurso de nuestro ejecutable desde el propio ejecutable. Tiene que ser otro programa el que lo haga, cuando el ejecutable en cuestión no esté en uso.Adjunto un sencillo ejemplo (en realidad unas pruebas) sobre todo esto. se trata de dos programas de tipo consola. Uno es el que contiene un determinado recurso del tipo que estamos tratando. El otro programa puede ejecutarse de modo que actualize el dato contenido en el recurso del primero.

En el caso del ejemplo que adjunto y a modo de prueba, lo que se actualiza en el ejecutable es una supuesta "fecha de compilación". De este modo es fácil ver cómo se actualiza el contenido del recurso: lo que se verá es la fecha y hora actuales... cada segundo el dato es susceptible de cambiar.

Si tienes alguna duda ya sabes dónde estamos. Ya dirás qué te parece de todo esto.

galmacland
11-06-2006, 16:26:06
Gracias por tu respuesta, pero aun asi no es lo que necesito.. esto evidencia un archivo externo..yo estoy buscando validar una aplicacion con un serial sin tener que usar otros archivos. es decir que me compruebe que el serial es correcto despues de haberlo insertado una unica vez, y que se puedan utilizar las opciones de la aplicacion que me limitan una version demo al hacerlo.

seoane
11-06-2006, 16:39:24
Tampoco hay que darle tantas vueltas. Si no puedes tener dos ejecutables, crea uno solo, cuando quieras actualizarlo que el mismo se copie a un directorio temporal ejecute la copia y se cierre. La copia actualizara el ejecutable original, lo volvera a abrir y se cerrara. Ahora solo falta que el original borre la copia del directorio temporal.

De todas formas si es para crear una demo, hay formas mas sencillas: claves en el registro, archivos de inicio, etc... que para un usuario experto ( :D hacker o crackers o como se autodenominen) son sencillos de romper pero guardar los datos en el ejecutable tampoco los va a despistar demasiado.