Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-05-2019
wonderDev wonderDev is offline
Registrado
 
Registrado: dic 2015
Posts: 9
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: 20-05-2019 a las 08:44:55.
Responder Con Cita
  #2  
Antiguo 20-05-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
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 20-05-2019
wonderDev wonderDev is offline
Registrado
 
Registrado: dic 2015
Posts: 9
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 20-05-2019
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.

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 20-05-2019
wonderDev wonderDev is offline
Registrado
 
Registrado: dic 2015
Posts: 9
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 20-05-2019
wonderDev wonderDev is offline
Registrado
 
Registrado: dic 2015
Posts: 9
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
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
??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 20:40:10.


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