Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-08-2011
cmfab cmfab is offline
Miembro
 
Registrado: jun 2010
Posts: 419
Poder: 14
cmfab Va por buen camino
Guardar datos en un ejecutable

Hola a todos, hoy quisiera hacerles una pregunta interesante. es posible en
un momento de ejecucion de una aplicacion que esta guarde dos variables
por ejemplo de tipo strings dentro del propio ejecutable ?. algo así como
un recurso, pero que esta informacion quede dentro del .exe que no sea
visible al usuario. desde ya mil gracias a todos por sus atenciones
Responder Con Cita
  #2  
Antiguo 10-08-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola cmfab.

Puedo estar equivocado, pero según creo, desde la misma aplicación no es posible ya que el archivo está bloqueado para escritura mientras permanece abierto.


Un saludo.

Edito: Una pregunta, ¿ Por que motivo deseas guardar una cadena de caracteres en el ejecutable ?
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 10-08-2011 a las 20:06:29.
Responder Con Cita
  #3  
Antiguo 10-08-2011
genius78 genius78 is offline
Registrado
NULL
 
Registrado: ago 2011
Posts: 4
Poder: 0
genius78 Va por buen camino
Investiga

Investiga la funcion
Código Delphi [-]
UpdateResource
Responder Con Cita
  #4  
Antiguo 10-08-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por genius78 Ver Mensaje
Investiga la funcion
Código Delphi [-]
UpdateResource
Hola genius78 y bienvenido a los foros de ClubDelphi.

La función UpdateResource no escribe dentro del propio ejecutable como solicita cmfab, lo hace en los recursos embebidos en él, de todos modos pienso que con Delphi y desde el programa en ejecución no es factible. ( hasta que me demuestren lo contrario... )

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 10-08-2011 a las 20:33:07.
Responder Con Cita
  #5  
Antiguo 10-08-2011
cmfab cmfab is offline
Miembro
 
Registrado: jun 2010
Posts: 419
Poder: 14
cmfab Va por buen camino
Hola gracias por las respuestas, pero quiza me sirva ese recurso si esta embebido en el exe. quiere decir que el usuario no puede cambiar esos parametros, es así. podrian indicarme como hacerlo. gracias
Responder Con Cita
  #6  
Antiguo 10-08-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola de nuevo cmfab.

Creo que vas a necesitar mucho más que esa función para solucionar el problema, es el S.O. a quién hay que 'puentear' para lograrlo. Ya que como te dije tu archivo .exe estará bloqueado para escritura mientras permanezca abierto.

Quizá con alguna rutina residente que pudiera tomar una instantánea de tu programa y esperar a que se cierre para adicionar los datos y reescribir el exe, u otro artilugio que desconozco se pueda lograr. (Si el antivirus no empieza a chillar como desquiciado... ).

Pero insisto con mi pregunta: ¿ Cuál es el motivo ? Por que seguramente haya un modo más sencillo de hacer lo que buscas.

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 10-08-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.009
Poder: 20
oscarac Va por buen camino
si derrepente lo que buscas es ir guardando informacion al salir del sistema o en el transcurso de su ejecucion podrias utilizar archivos tipo INI o algun archivo de texto donde la informacion que se guarde pueda estar encriptada para que nadie pueda interpretarla
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #8  
Antiguo 10-08-2011
cmfab cmfab is offline
Miembro
 
Registrado: jun 2010
Posts: 419
Poder: 14
cmfab Va por buen camino
Gracias a todos en especial a ecfisa. bueno os comento un poco mas. el tema es que no puedo usar archivos ini, ni tablas de una BD por ejemplo, ni el registro.
se que se puede encriptar la informacion para que no se interprete pero lo
que me urge es que no se pueda eliminar, si uso los metodos mencionados
anteriromente el usuario podria eliminar esa informacion. repito lo que necesito es que una vez que yo parapetrice un par de variables tipo strings
el usuario de la aplicacion no pueda eliminar fisicamente estos datos, lo cual no es seguro desde una seccion de un archivo ini, o de un campo de una tabla de la BD.
espero me haya explicado correctamente. gracias a todos
Responder Con Cita
  #9  
Antiguo 10-08-2011
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Hola...

Si encriptas un archivo INI y aparte le das un nombre raro y lo ocultas, muy difícilmente un usuario promedio le podrá meter mano. También puedes usar el registro de Windows y usar nombres de clave y valores encriptados. El registro de Windows es otro lugar donde los usuarios promedio no meten sus narices.


Saludos...
__________________
Lee la Guía de Estilo antes que cualquier cosa. - Twitter
Responder Con Cita
  #10  
Antiguo 10-08-2011
cmfab cmfab is offline
Miembro
 
Registrado: jun 2010
Posts: 419
Poder: 14
cmfab Va por buen camino
Gracias, pregunto y se podrá usar una dll con esas variables y modificarlas
en un momento determinado ?
Responder Con Cita
  #11  
Antiguo 10-08-2011
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Hola...

Si puedes declarar variables en una DLL y modificarlas en tiempo de ejecución, lo que no podrás hacer es guardar ese valor persistentemente dentro de la misma.

Ya te dimos varias opciones y creo que deberías considerarlas antes de seguir adelante con lo que te propones.

Aquí un hilo que trata casi de lo mismo que preguntas: http://www.clubdelphi.com/foros/showthread.php?t=29039

Y también si te fijas hasta abajo de este mismo hilo verás algunos enlaces a otros temas.



Saludos...
__________________
Lee la Guía de Estilo antes que cualquier cosa. - Twitter
Responder Con Cita
  #12  
Antiguo 10-08-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.009
Poder: 20
oscarac Va por buen camino
segun mi humilde opinion intentar grabar datos en un ejecutable es complicarse la vida, alguna vez vi modificar un ejecutable para que en algunos titulos aparezca otra cosa.... pero se hacia a bajo nivel con ensamblador

si quieres guardar datos que no se puedan borrar, existen muchas formas.... archivos include ocultos, registro de windows, archivos alternativos... (si borran uno te queda el otro como backup, etc), las posibilidades son muchas
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #13  
Antiguo 10-08-2011
Avatar de jose_kira_sk8
jose_kira_sk8 jose_kira_sk8 is offline
Registrado
NULL
 
Registrado: jul 2011
Posts: 9
Poder: 0
jose_kira_sk8 Va por buen camino
Post

Cita:
Empezado por oscarac Ver Mensaje
segun mi humilde opinion intentar grabar datos en un ejecutable es complicarse la vida, alguna vez vi modificar un ejecutable para que en algunos titulos aparezca otra cosa.... pero se hacia a bajo nivel con ensamblador

si quieres guardar datos que no se puedan borrar, existen muchas formas.... archivos include ocultos, registro de windows, archivos alternativos... (si borran uno te queda el otro como backup, etc), las posibilidades son muchas
te doy toda la razón , a mi también me a pasado , es algo muy complicado guardar datos en el ejecutable y casi sin sentido diría , ahí muy pocas excepciones que esto seria viable.
Responder Con Cita
  #14  
Antiguo 11-08-2011
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Si te decides a llevarlo a cabo, ten en cuenta que es probable que la mayoría de los antivirus que existen te den una alarma cuando se intente modificar un ejecutable. Digamos que es una cosas considerada como "sospechosa".
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #15  
Antiguo 11-08-2011
cmfab cmfab is offline
Miembro
 
Registrado: jun 2010
Posts: 419
Poder: 14
cmfab Va por buen camino
Gracias a todos por sus respuestas y tiempo

un gran saludo
Responder Con Cita
  #16  
Antiguo 11-08-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Por si fuera de utilidad, hice un ejemplo simple que guarda cifrado el numero de serie lógico del disco en el registro y luego lo recupera:
Código Delphi [-]
...

uses Registry;

(* Escribe serial en registro *)
procedure WriteRegKey(const ARootKey: HKEY; const AKey, Valor, NSer: string);
begin
  with TRegistry.Create(KEY_WRITE) do
  try
    RootKey := ARootKey;
    if not OpenKey(AKey, True) then
      raise Exception.Create('Error escribiendo el registro')
    else
    begin
      WriteString(Valor, NSer);
      CloseKey;
    end
  finally
    Free
  end
end;

(* Devuelve serial almacenado en registro *)
function ReadRegKey(const ARootKey: HKEY; const AKey, Valor: string): string;
begin
  with TRegistry.Create do
  try
    RootKey := ARootKey;
    if not OpenKey(AKey, False) then
      raise Exception.Create('Error leyendo el registro')
    else
    begin
      ReadString(Result);
      CloseKey
    end
  finally
    Free
  end
end;

(* Obtiene el número serial del disco *)
function HDSerial(const lpRootPathName: PChar): string;
var
  lpMaximumComponentLength: DWORD;
  lpFileSystemFlags: DWORD;
  lpVolumeSerialNumber: DWORD;
  lpVolumeNameBuffer:  array[0..MAX_PATH] of Char;
begin
  GetVolumeInformation(PChar(lpRootPathName),
                       @lpVolumeNameBuffer,
                       SizeOf(lpVolumeNameBuffer),
                       @lpVolumeSerialNumber,
                       lpMaximumComponentLength,
                       lpFileSystemFlags, nil, 0);
  Result := IntToHex(HiWord(lpVolumeSerialNumber),4) +
            IntToHex(LoWord(lpVolumeSerialNumber),4);
end;

(* rutina trivial de cifrado *)
procedure Cifrar(var Valor: string);
var
  i: integer;
begin
  for i:= 1 to Length(Valor) do
    Valor[i]:= Chr(((Ord(Valor[i]) xor 172)xor 15));
end;

(* Ejemplo de uso *)
procedure TForm1.Button1Click(Sender: TObject);
const
  VALOR_KEY = '\Software\Microsoft\Windows\CurrentVersion';
var
  NSer: string;
begin
  NSer:= HDSerial('C:\');                     // Obtener serial
  Label1.Caption:='Serial Original: ' + NSer; // Mostrar
  Cifrar(NSer);                               // Cifrarlo
  // Escribir serial cifrado en el registro
  //'NombreConfuso' es cualquiera que no se vislumbre como protección.
  WriteRegKey(HKEY_LOCAL_MACHINE,VALOR_KEY,'NombreConfuso',NSer);
  // Leer el serial almacenado en el registro
  NSer:= ReadRegKey(HKEY_LOCAL_MACHINE,VALOR_KEY,'NombreConfuso');
  Label2.Caption:='Serial Cifrado: ' + NSer;  // Lo que se ve en el registro
  Cifrar(NSer);                               // Descifrarlo
  Label3.Caption:= 'Serial Restaurado: '+Nser;// Mostrarlo
end;
Como es sólo un ejemplo la rutina de cifrado no es ninguna maravilla , pero se puede cambiar por la que sea.

Espero que sirva como base para mejorarlo a gusto

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 11-08-2011 a las 22:38:12. Razón: Acomodar identación
Responder Con Cita
  #17  
Antiguo 23-04-2016
arriolar arriolar is offline
Registrado
NULL
 
Registrado: oct 2011
Posts: 3
Poder: 0
arriolar Va por buen camino
¡¡¡Si es Posible guardar datos en el ejecutable!!!

Hola, ya se que es tarde pero le puede servir a otros. Dentro del ejecutable no se puede, pero si a continuacion de el.

Hace tiempo hice una pequeña aplicacion tipo Libreta de Direcciones para llevar en el usb, tener en la Pc o en la nube, los datos los guardaba en un archivo independiente. Al pasarselo a amigos se quejaban que no les abria, por que no sabian que hacia falta copiar la BD tambien.

Asi que por deporte me propuse obtener esto con un unico archivo que contuviese la BD y el ejecutable, que funcionase trasparente al usuario y guardase los cambios efectuados a la BD.

La "Danza" a grosso modo es la siguente:
Creamos el ejecutable y la BD, con otro programa le anexamos a continuacion la BD al programa.

El ejecutable acepta parametros y segun estos actua de distintos modos:

Sin parametros el programa compara una variable que definimos en tiempo de diseño cuyo valor es el tamaño real del ejecutable.

En caso de ser su tamaño mayor asume que contiene en si a la BD, se abre a si mismo en modo lectura y guarda una copia de si mismo con otro nombre (ya veremos luego por que), extrae la BD, llama a ejecutar su copia pasandole como parametro su propia ruta y nombre.

La copia al recibir el parametro ya sabe que es la copia y no el original, el usuario trabaja normal y al momento de cerrarse usa el parametro para borrar el original, se copia a si mismo con el nombre del original y le anexa a continuacion la BD, invoca al programa original con el parametro LIMPIAR y se cierra.

El programa al recibir el parametro LIMPIAR borra la copia, la BD y se cierra.

Este programa lo realice en C++ Con CBuilder5, use rutinas de manejo de archivos binarios (fOpen,fSeek etc)
Recientemente lo hice en Linux con Lazarus y me ahorre las rutinas dichas tirando del comando dd (DiskDump) que es muy potente, tambien le añadi cifrado fuerte a la BD ya que almacena usuarios y contraseñas.
Responder Con Cita
  #18  
Antiguo 23-04-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.022
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Hola, bienvenido y gracias por contar tu historia.
No olvides, como todos los nuevos en clubdelphi, leer nuestra guía de estilo, gracias
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Guardar datos en Base de Datos MySQL knnibal Conexión con bases de datos 6 23-06-2011 16:36:42
Guardar valor de variables dentro del ejecutable jourdan OOP 5 19-07-2010 19:53:47
Como almacenar datos en un ejecutable droguerman Linux 1 04-04-2009 15:03:16
Guardar en 1 base de datos SQL, datos procedentes de 2 tablas distintas adaypr C++ Builder 1 05-09-2006 12:56:33
Guardar carpeta en un ejecutable Drake C++ Builder 2 02-04-2006 01:08:35


La franja horaria es GMT +2. Ahora son las 12:38:34.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi