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

Soyez le premier à donner votre avis sur cette source.

Snippet vu 22 901 fois - Téléchargée 125 fois

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

Ajouter un commentaire

Commentaires

cs_MaXoR
Messages postés
39
Date d'inscription
dimanche 25 mai 2003
Statut
Membre
Dernière intervention
18 décembre 2005
-
vous pouvez utilise exemod pour delphi qui functionne tret bien aller voir sur google il est la
MoveX
Messages postés
230
Date d'inscription
vendredi 9 mai 2003
Statut
Membre
Dernière intervention
16 juillet 2005
1 -
serait il possible de faire un zip, en plus du code, parce que la je pige pas tout, je vois pas comment integrer ca...
aliwassem
Messages postés
3
Date d'inscription
jeudi 3 avril 2003
Statut
Membre
Dernière intervention
5 septembre 2004
-
salut les amis

j'ai essayé créer une exe d'après cette source mais je peux pas, je trouve des erreurs dans la ligne suivante

BlockRead(F,Pointer(ExeBuf)^, BufSize);

est ce que vous pouvez m'aider

merci d'avance
cs_MaXoR
Messages postés
39
Date d'inscription
dimanche 25 mai 2003
Statut
Membre
Dernière intervention
18 décembre 2005
-
je voudrai savoir si sais possible de faire un patch maker avec saitte source et comment l'utiliser svp merci
e1130
Messages postés
23
Date d'inscription
dimanche 5 janvier 2003
Statut
Membre
Dernière intervention
7 juin 2007
-
Le gars ses contenter de copier le code su le site de borland

Writing custom data to executable files in Windows and Linux
http://bdn.borland.com/article/0,1410,27979,00.html

la reponse pour le TExeBuf est :

type
//fixed-size buffer for the custom data
TExeBuf = Array [0..555] of char;

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.