Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-01-2006
pepe2000 pepe2000 is offline
Miembro
 
Registrado: dic 2003
Ubicación: Cajamarca
Posts: 93
Poder: 21
pepe2000 Va por buen camino
Post sobreescribir ejecutable EXE

Hola.
Siempre que necesito guardar el valor de una variable utilizo un archivo ini para una actualización en el futuro.
Pero lo que ahora necesito es que esa variable actualice su valor pero ese valor se guarde "dentro" del archivo EXE.
Si aun no me dejo entender, debo decirles que la variable X:=20 con la que compilé mi aplicación quiero actualizarlo con otro valor X:=60 (por ejemplo), pero esa modificación deberá contenerse en el mismo EXE.

Agradezco por anticipado su ayuda
Responder Con Cita
  #2  
Antiguo 11-01-2006
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.275
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
Antes de nada decirte que eso, en sí, es un poco raro.
Realmente no explicas lo que necesitas o para qué, cosa que podría ayudar a darte otras soluciones...
Lo que está claro es que la propia aplicación no puede modificarse, lo que quiere decir que la aplicación no va a poder cambiar ese valor de 20 a 60.
Se puede hacer desde otra aplicación, pero como ya te he diho es un poco raro; Es decir puedes hacer otra aplicación que modifique la original y cambie ese valor.
¿Es eso lo que necesitas? Es costoso y realmente complejo.
__________________
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
  #3  
Antiguo 11-01-2006
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Yo alguna vez lo hice, prefiero reservarme para que , y creo que lo comenté en el foro alguna vez, pero no lo he encotrado.
El problema principal es que Windows cuando crea un proceso marca el archivo ejecutado como solo lectura, deniega la escritura en el mismo. O sea que solo podrás modificar los datos de un archivo que no este en uso, si mal no recuerdo había alguna rutina perdida en la red que hacía algunos malabares para permitirlo. Creo que las pruebas que hice al respecto fueron poco satisfactorioas.
Bueno, si te sirve que un programa cree una copia de si mismo con algunos estos datos, o que modifique otra compia del programa que si se podrá autoleer, esto que te he escrito te tiene que funcionar:
Código Delphi [-]
 
type
  { Plantilla de la información de configuración }
  TCustomParameters = record
    Header: array[0..3] of char; {Los PE Executables normalmente terminan en #0 el header es una marca extra}
    Value1: Integer;
    Value2: Integer;
    Value3: Integer;
    Value4: Integer;
  end;

const
  CP_HEADER = 'H'#23#25;

var
  Parameters: TCustomParameters;

procedure ReadParameters(AFileName: TFileName);
begin
  with TFileStream.Create(AFileName, fmOpenRead + fmShareDenyNone) do
    try
      Seek(-SizeOf(TCustomParameters), soEnd);
      ReadBuffer(Parameters, SizeOf(TCustomParameters));
    finally
      Free;
    end;
end;

procedure WriteParameters(AFileName: TFileName; ARecordExists: Boolean);
begin
  with TFileStream.Create(AFileName, fmOpenWrite + fmShareDenyNone) do
    try
      if ARecordExists then
        Seek(-SizeOf(TCustomParameters), soEnd)
      else
        Seek(0, soEnd);

      WriteBuffer(Parameters, SizeOf(TCustomParameters));
    finally
      Free;
    end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ReadParameters(ParamStr(0));

  with Parameters do
  begin
    Edit1.Text := IntToStr(Value1);
    Edit2.Text := IntToStr(Value2);
    Edit3.Text := IntToStr(Value3);
    Edit4.Text := IntToStr(Value4);
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  if SaveDialog1.Execute then
  begin
    {Lee anteriormente para fijase si ya se había agregado la información al final del archivo}
    ReadParameters(SaveDialog1.FileName);

    with Parameters do
    begin
      Header := CP_HEADER;
      Value1 := StrToIntDef(Edit1.Text, 0);
      Value2 := StrToIntDef(Edit2.Text, 0);
      Value3 := StrToIntDef(Edit3.Text, 0);
      Value4 := StrToIntDef(Edit4.Text, 0);
    end;
    WriteParameters(SaveDialog1.FileName, Parameters.Header <> CP_HEADER);
  end;
end;

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #4  
Antiguo 14-01-2006
pepe2000 pepe2000 is offline
Miembro
 
Registrado: dic 2003
Ubicación: Cajamarca
Posts: 93
Poder: 21
pepe2000 Va por buen camino
Lightbulb Explicando

Muchas gracias a ambos por su ayuda.
Neftali, te cuento que yo necesito cambiar un valor dentro del mismo ejecutable para llevar un contador de las veces que ingresa un usuario al mismo, de tal manera que (como tema de seguridad) se pueda restringir a un cierto numero de ingresos.
Actualmente esto lo manejo con archivos ini, pero he descubierto que personas escrupulosas han encontrado el archivo y ya no hay manera de detenerlos.
No se si me dejé explicar bien, en todo caso agradecería cualquier ayuda sobre tema de seguridad contra hackers.
Gracias.
Responder Con Cita
  #5  
Antiguo 14-01-2006
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Cita:
Empezado por pepe2000
Actualmente esto lo manejo con archivos ini, pero he descubierto que personas escrupulosas han encontrado el archivo y ya no hay manera de detenerlos.
No se si me dejé explicar bien, en todo caso agradecería cualquier ayuda sobre tema de seguridad contra hackers.
Gracias.
Un buen hacker, tardará menos tiempo en darse cuenta que modificas el propio ejecutable que el que tardaba en encontrar el ini que modificabas antes. Yo que vos dejaba en el mismo ini una serie de números calculados con una fórmula algo rebuscada, que igual no sería muy dificil de encontrar para un buen hacker, pero algo es algo.

Es decir, algo mas dificil de imaginar el cómo funciona. Se me ocurre ahora que podrías convertir el número de ejecuciones en una cadena con cierta repetición y luego calcular su md5, almacenando en el ini esa información.

Al cargar de nuevo, si el md5 no coincide con el calculado con el número de ejecuciones, pues violá!! no podes entrar mas al programa y si lo intentas otra vez te formateo el disco..

Mas fácil de conseguir, y si el susodicho hacker no es muy bueno, seguro se tarda un buen rato en encontrar la solución.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #6  
Antiguo 16-01-2006
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.275
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
Cita:
Empezado por pepe2000
...te cuento que yo necesito cambiar un valor dentro del mismo ejecutable para llevar un contador de las veces que ingresa un usuario al mismo, de tal manera que (como tema de seguridad) se pueda restringir a un cierto numero de ingresos.
Actualmente esto lo manejo con archivos ini, pero he descubierto que personas escrupulosas han encontrado el archivo y ya no hay manera de detenerlos.
Ya me imaginaba que era para algo así.
Hace tiempo estuve dándole muchas vueltas al tema (por una petición similar a la tuya -seguridad-) y llegué a la conclusión de que un sistema "medianamente potente" y sencillo de implementar es lo más práctico. Por un lado evitas que el 98% (por dar una cifra) de los usuarios "rompa" el programa y del otro 2%, no te preocupes, porque seguramente "lo van a romper" hagas lo que hagas.

En cuanto al sistema que comentas, creo que te va a dar demasiados problemas (la idea de modificar un ejecutable) y tampoco te asegura nada, ya que haciendo una copia del ejecutable original y utilizandolo cada vez pierdes por completo el control (estoy de acuaedo en lo que te han comentado, que modificar el ejecutable es algo que no pasa desapercibido, para algien con algunos conocimientos).

Yo optaría por guardar la información en el registro con una determinada encriptación. Eso te evitará el 98% de los comentados anteriormente se "salten" la protección.
__________________
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
Respuesta



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
Tener una dll dentro de mi ejecutable??? marceloalegre Varios 5 02-12-2005 10:05:24
Saber en qué path está mi ejecutable (sin usar el objeto Application) Feñiz OOP 2 17-02-2005 16:36:41
Cambiar el Nombre del Ejecutable barrauda API de Windows 2 30-11-2004 20:32:36
Ayuda con ejecutable RookDelphi Varios 3 13-06-2004 18:30:17
Hacer ejecutable mas pequeño ElCherchu Varios 2 21-11-2003 16:08:22


La franja horaria es GMT +2. Ahora son las 13:44:41.


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