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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo Hace 3 Semanas
wonderDev wonderDev is offline
Registrado
 
Registrado: dic 2015
Posts: 8
Poder: 0
wonderDev Va por buen camino
Smile Como escribir ciertos bytes en un exe y eliminarlos luego !

Estimados, hacia años que no entraba a este increible foro. Un abrazo enorme a todos.


Resulta que necesito simplemente corromper un exe y solo mi aplicacion debe ser capaz de devolerlo al estado original y ejecutarlo. Supuse que escribiendo unos bytes al inicio corrompo el exe y eso justamente es lo que sucedio. Pero no supe como eliminar esos bytes y volverlo a su estado original. Por favor si me pueden ayudar les agradeceria demasiado.


Un par de metodos como EscribirBytes y que escribiera amoclubdelphi y otro que simplemente se llamara RemoverBytes y eliminara amoclubdelphi del archivo y lo volviera a su original. Gracias de antemanos y de nuevo agradecido de que en nuestro planeta tierra exista un foro tan increible como este.

Última edición por dec fecha: Hace 3 Semanas a las 08:44:55.
Responder Con Cita
  #2  
Antiguo Hace 3 Semanas
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 29.186
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Hola, ¿cómo lo escribiste? muestra tu código y explica exactamente dónde tienes la duda.
Responder Con Cita
  #3  
Antiguo Hace 3 Semanas
wonderDev wonderDev is offline
Registrado
 
Registrado: dic 2015
Posts: 8
Poder: 0
wonderDev Va por buen camino
Escribir Bytes !

Cita:
Empezado por Casimiro Notevi Ver Mensaje
Hola, ¿cómo lo escribiste? muestra tu código y explica exactamente dónde tienes la duda.

Hola Casimiro, gracias por responder. El codigo que tengo para escribir algunos bytes viene quedando mas o menos asi:


Código Delphi [-]
procedure TfrmMain.cxButton1Click(Sender: TObject);
var
  vClientStream: TFileStream;
  var nombre: String;
begin

  vClientStream := TFileStream.Create('C:\Juegos\buscaminas.exe', fmOpenReadWrite);

  nombre := 'Casimiro';

  try
    //vClientStream.Position := 0;
    vClientStream.Seek(0, 0);
    vClientStream.WriteBuffer(nombre, Length(nombre));
  finally
    vClientStream.Free;
  end;

end;


Lo que sucede es que con ese codigo corrompo ese .exe, pero necesito de alguna forma volver a deshacer eso. O si tienen alguna idea mejor pues la utilizaria.
Responder Con Cita
  #4  
Antiguo Hace 3 Semanas
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.202
Poder: 31
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.

Si te entendí bién, supongo que este ejemplo te servirá de guía:
Código Delphi [-]
...
implementation 

const
  FNAME = 'C:\Temp\notepad.exe'; // copia de C:\windows\notepad.exe

var
  OriginalString: string;

function ChangeChain(AFileName, Chain: string): string;
var
  Stream: TFileStream;
  sz   : Integer;
begin
  sz := Length(Chain);
  SetLength(Result, sz);
  Stream := TFileStream.Create(AFileName, fmOpenRead);
  try
    Stream.Position := 0;
    Stream.Read(Pointer(Result)^, sz);
  finally
    Stream.Free;
  end;
  Stream := TFileStream.Create(AFileName, fmOpenWrite);
  try
    Stream.Position := 0;
    Stream.Write(Pointer(Chain)^, sz);
  finally
    Stream.Free;
  end;
end;

// Corromper el archivo 
procedure TForm1.btChangeClick(Sender: TObject);
begin
  OriginalString := ChangeChain(FNAME,
    '012345678901234567890123456789012345678901234567890123456789'+ // cualquier valor
    '012345678901234567890123456789012345678901234567890123456789');
   // luego de aquí no podrás ejecutar "c:\temp\notepad.exe"
end;

// Restaurarlo
procedure TForm1.btRestoreClick(Sender: TObject);
begin
  ChangeChain(FNAME, OriginalString);
  // luego de aquí podras ejecutar "c:\temp\notepad.exe"
end;

end.
Para que sea mas funcional, a diferencia del ejemplo, deberías almacenar la cadena que corrompe el archivo en un medio perdurable, de modo que puedas recuperarla luego.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo Hace 3 Semanas
wonderDev wonderDev is offline
Registrado
 
Registrado: dic 2015
Posts: 8
Poder: 0
wonderDev Va por buen camino
Cool gracias !

Gracias amigo, voy a probar a ver como va y te dejo saber. Muchisimas gracias !
Responder Con Cita
  #6  
Antiguo Hace 3 Semanas
wonderDev wonderDev is offline
Registrado
 
Registrado: dic 2015
Posts: 8
Poder: 0
wonderDev Va por buen camino
@ecfisa muchas gracias por la ayuda, pero ese metodo no me conviene. La idea es tener unos bytes fijos que de antemano conozcamos, escribirlos al inicio. Y en futuras ejecuciones de mi Sowftware, simplemente borrarlos. O sea romper cierto exe una sola vez, y luego solamente eliminar eso cada ves que se ejecute mi app.

Te explico: Yo estoy haciendo un launcher para un juego y te voy a distribuir el launcher con el ejecutable del juego ya con ciertos bytes al inicio o al final, impidiendote que lo ejecutes directamente. Por debajo mi launcher lo que hara es cojer ese .exe, copiarlo hacia otro lugar, eliminarle esos bytes y ejecutarlo desde ese lugar (la carpeta temp por ejemplo). Lo que te quiero decir es que necesito romper el exe una sola vez y que sea fijo lo que le tenga que eliminar para poderlo restaurar, me entiendes mas o menos?. Segun estuve testeando esa funcion que hiciste si, funciona genial, pero no me conviene tener que estar guardando ese valor constantemente ni mucho menos y ademas, ya ese exe el del juego se le va a dar a los usuarios roto, el launcher lo que tendria es que revertirle lo que tenga agregado, o sea los bytes para volverlo ejecutable de nuevo. Me explico mas o menos?

Lo ideal seria, escribirle 5 bytes fijos y luego de haberlo corrompido, tener la funcion que le elimine esos 5 bytes (fijos) y ya lo vuelva a su estado original. Puede ser 1 byte, 10 bytes, lo que sea, al inicio o al final, donde sea, pero que sean fijos y que yo pueda simplemente eliminarlos cuando estime necesario. Gracias de nuevo y espero me entiendas.
Responder Con Cita
  #7  
Antiguo Hace 3 Semanas
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.202
Poder: 31
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.

¿ Y no te sirve entregar el ejecutable con la cadena ya alterada ?

Podes usar (o modificar) la función del ejemplo anterior dentro de tu lanzador, para cambiar la cadena alterada por la original que previamente hayas obtenido. La cadena original podrías almacenarla como constante o como recurso en tu lanzador...

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #8  
Antiguo Hace 3 Semanas
wonderDev wonderDev is offline
Registrado
 
Registrado: dic 2015
Posts: 8
Poder: 0
wonderDev Va por buen camino
Ok si entiendo lo que dices, muchas gracias y te dejo saber. El metodo que me diste funciona excelente, solo es adaptarlo. Thanks u !
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
??Como obtener los bytes de una imagen seleccionada y guardarlos?? jasmad Lazarus, FreePascal, Kylix, etc. 3 11-11-2011 18:22:09
Buscar archivos .log y eliminarlos mefixxto API de Windows 2 19-11-2010 23:28:57
Cómo crear un arreglo de bytes apartir de una imagen? fredycc Gráficos 5 10-02-2009 17:33:46
Como agregar grupos para concederi ciertos privilegios... Arturo Linux 1 02-06-2006 13:52:17
Como mostrar los datos para luego insertarlos? judoboy OOP 8 14-05-2003 09:51:51


La franja horaria es GMT +2. Ahora son las 21:23:25.


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