Modifier un exe ( intégrer des variables , mot de passe )

Contenu du snippet

Bonjour ,

Ce code est une copie-coller
de mon tutorial
si vous voulez le voir en clair

http://www.remixtech.com/dataexe.php

Source / Exemple :

La modification de variable interne dans un programme déja compilé ...
Possible ? Impossible ? En delphi c'est Impossible ? He bien non , avec le procédé que nous énoncerons plus loin vous pourrez stocker , des chaines , des fichiers , et bien d'autre chose ....

I Pourquoi ?
Enregistrement de logiciel
Préférence , au lieu des fichiers INI
Informations de sécurités
Ajout de fichier voir de Plug-in et autre ...
Creer des logiciels d'installation du type InstallShield ... He oui c'est possible ;-) Bonne chance ...

 
II Introduction 
Chaque systeme d'exploitation utilise une architecture différente pour ses executables , ici nous citerons uniquement PE(Win32) ce qui reste bien sur valable pour Linux(ELF) 

 

 

 

 

 

 

 

Les infos de chargement sont les données qui permettent de charger les infos du disque et de tout charger en mémoire ....

III Ou met on alors les informations ?
On met simplement les données à la fin dans une partie nommée partie de personalisation ...

----------------------------------------
Headers
----------------------------------------
Section /Segment N°1
---------------------------------------
Section/Segment N°2
---------------------------------------
|

|

----------------------------------------
Section/Segment N
----------------------------------------
----------------------------------------
!!! Partie personalisable !!!
----------------------------------------

 

 

 

 

 

 

 

 

IV Que peut on ajouter dans cette partie ...
Tout , ce qui est binaire ou qui ressemble à du texte ;-) Enfin tout . Voici les variables et constante que nous déclarerons pour écrire dans un fichier dit exe ...

const
//Notre Signature de L'EXE, cette trace nous servira à savoir ou l'on doit chercher... 
ExeBufSig = 'EB1.0';

type
//Le record nous aidera à insérer mais aussi retrouver notre trace ...
TExeBufFooter = record
OriginalSize : Integer;
Sig : Array[0..4] of char;
end;

 

 

 

 

 

VI Comment ajouter des données .
Vous devez traiter ce fichier , comme un fichier normal binaire , rien de plus dur , rien de plus simple , Attention le fichier ne doit pas être utilisé pour la modification ...

procedure SetExeData (ExeName : String; ExeBuf : TExeBuf);
var
F : File;
BufSz,OrigSz : Integer;
Footer : TExeBufFooter;
begin
AssignFile (F,ExeName);
Reset (F,1);
try
//On place dans la variable OrigSZ la taille du fichier d'origine 
OrigSz := FileSize(F);
//On va grace à seek à la fin du fichier
Seek (F,OrigSz);
//On écris nos données juste après la fin du fichier ...
BufSz := Length(ExeBuf);
BlockWrite (F,Pointer(ExeBuf)^,BufSz);
//On écris ensuite notre Footer
FillChar (Footer,SizeOf(Footer),0);
Footer.OriginalSize := OrigSz;
Footer.Sig := ExeBufSig;
BlockWrite (F,Footer,Sizeof(Footer));
finally
CloseFile (F);
end;
end;


VII Comment Lire des donnés
Encore une fois pas trop compliqué , mais il fallait y penser ...

procedure GetExeData (ExeName : String; var ExeBuf : TExeBuf);
var
F : File;
CurrSz, BufSize : Integer;
OldFileMode : Integer;
Footer : TExeBufFooter;
begin
AssignFile (F,ExeName);
//On sauve l'ancien FileMode
OldFileMode := FileMode;
//On utilise LectureSeul
FileMode := 0;
try
Reset (F,1);
try
//On prend la taille courante du fichier
CurrSz := FileSize (F);
//On cherche la place de BIG footer LOL et on le lit
Seek (F,CurrSz-SizeOf (Footer));
BlockRead (F,Footer,Sizeof(Footer));
//SI il n'ya pas de Signature BEN c'est qu'il n'y apas de donnée ... 
if Footer.Sig <> ExeBufSig then
raise EExeBuf.Create ('Pas de donné dans l''exe');
/On calcul le Tampon que l'on à écrit ci dessus
BufSize :=CurrSz-Footer.OriginalSize-SizeOf(Footer);
SetLength (ExeBuf,BufSize);
//On cherche et on LIT ! MDR
Seek (F,Footer.OriginalSize);
BlockRead(F,Pointer(ExeBuf)^, BufSize);
finally
CloseFile (F);
end;
finally
//On fait un retour vers le FileMode qu'on à sauver en haut ...
FileMode := OldFileMode;
end;
end;


VII Traiter ce que l'on a récupéré
Oui il faut traiter les données afin de pouvoir les utiliser , rien de compliqué , c'est MOVE qui nous mache le travaille , sinon faites très attention les données que vous inscrivez ne sont pas cryptés .. Elle sont visibles même avec Notepad .... Conclusion cryptéz les avec un Algo maison ...

procedure StringToExeBuf (const S : String; var ExeBuf : TExeBuf);
begin
SetLength(ExeBuf,Length(S));
Move (Pointer(S)^,Pointer(ExeBuf)^,Length(S));
end;

function ExeBufToString (const ExeBuf : TExeBuf) : String;
begin
SetLength (Result,Length(ExeBuf));
Move (Pointer(ExeBuf)^,Pointer(Result)^,Length(ExeBuf));
end;


VIII Bon on l'utilise ???
Oui , Oui deux secondes voici comment utiliser tout cela ...

Lire :

procedure TForm2.Button1Click(Sender: TObject);
var
ExeBuf : TExeBuf;
begin
GetExeData(ParamStr(0),ExeBuf); // On va chercher
memo1.Text:=(ExeBufToString(ExeBuf)); // On traite 
end;
end.

Ecrire :

procedure TForm1.Button1Click(Sender: TObject);
const
FileName = 'LEFICHIER.exe';
var
ExeBuf : TExeBuf;
begin
StringToExeBuf(memo1.Text,ExeBuf); // On traite les données 
SetExeData(FileName,ExeBuf); // On les range dans le fichiers ;-)
end;

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.