Extraction hexadécimale d'un éxécutable [Résolu]

Messages postés
190
Date d'inscription
jeudi 18 janvier 2007
Statut
Membre
Dernière intervention
31 janvier 2019
- - Dernière réponse : cs_rt15
Messages postés
3982
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
- 21 juil. 2009 à 09:10
Bonjour les amis,

Je souhaiterai faire une extraction d'une partie de code, depuis un exécutable , et ce, en c++.

En fait, je possède un exe , qui contient, deux exe en un.
Je connais les adresses de début et de fin.

Je souhaiterai en c++ pouvoir extraire ce "bout de code" de cet exe avec mon adresse de début, et mon adresse de fin, puis en faire un nouvel exécutable.

Avez vous quelques infos à ce sujet ?

Merci bcp :)


Nixeus'
Afficher la suite 

9 réponses

Meilleure réponse
Messages postés
3982
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
9
3
Merci
C'est qu'il écrit "buffer", donc ton pointeur qui fait quatre octets, pas buffer[0] ->buffer[length], c'est à dire les valeurs pointées.

Fait une boucle ou utilise write.

Petite remarque : inutile d'allouer un buffer plus grand que ce que tu lis.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 122 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_rt15
Messages postés
3982
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
9
0
Merci
Salut,

Bin pas de difficulté particulière...
En C++ tu peux utiliser un ifstream pour lire et un ofstream pour écrire.

seekg() pour te déplacer au début de l'exe, puis read() dans un buffer de la bonne taille.

Aide de seekg avec exemple ici, aide du reste pas loin.
Commenter la réponse de cs_rt15
Messages postés
190
Date d'inscription
jeudi 18 janvier 2007
Statut
Membre
Dernière intervention
31 janvier 2019
0
Merci
Merci beaucoup, je regarde cela !

Nixeus'
Commenter la réponse de Nixeus
Messages postés
190
Date d'inscription
jeudi 18 janvier 2007
Statut
Membre
Dernière intervention
31 janvier 2019
0
Merci
Bonjour,


Je viens de regarder à cela et en effet cela devrait faire l'affaire. En revanche je cherche un exemple de syntaxe en utilisant des adresses et offset HéxaDécimaux avec Seekg, je n'en trouve pas.

Si je souhaite me positionner à l'adresses 0x000E00A1 :

cela me fera quelquechose, comme ca ?

is.seekg (0x000E00A1);
ou
is.seekg ($00E00A1);

Encore merci :)

Nixeus'
Commenter la réponse de Nixeus
Messages postés
3982
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
9
0
Merci
0x
Commenter la réponse de cs_rt15
Messages postés
190
Date d'inscription
jeudi 18 janvier 2007
Statut
Membre
Dernière intervention
31 janvier 2019
0
Merci
Merci à toi rt15,

La lecture semble mal se dérouler.

En fait ce que je veux c'est lire mon éxécutable courant (mon programme), et extraire une partie du code.
int length;
char * buffer;
char szExeName[256]; //Buffer qui va contenir le nom du fichier
GetModuleFileName (NULL, szExeName, 256);

ifstream is;
is.open (szExeName, ios::binary );

// Récupère le longeur du fichier
is.seekg (0, ios::end);
length = is.tellg();
is.seekg (0, ios::beg);

// Allouer mémoire pour le buffer
buffer = new char [length];

// Je me positionne, et je lit
is.seekg (0x00000111);
is.read (buffer,85010);
is.close();

ofstream objetfichier; 
objetfichier.open("monfichier.exe", ios::out); //on ouvrre le fichier en ecriture 
if (objetfichier.bad()) //permet de tester si le fichier s'est ouvert sans probleme 
MessageBox("Erreur","ok"); 
objetfichier <<buffer<< endl;//* 
objetfichier.close(); //on ferme le fichier pour liberer la mémoire 
delete[] buffer;






Au final, mon fichier de sortie " Monfichier.exe" fais 4 octets :(

Aurais tu une piste ? Merci

Nixeus'
Commenter la réponse de Nixeus
Messages postés
190
Date d'inscription
jeudi 18 janvier 2007
Statut
Membre
Dernière intervention
31 janvier 2019
0
Merci
Merci beaucoup, tout fonctionne avec le write :)


Nixeus'
Commenter la réponse de Nixeus
Messages postés
6539
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
0
Merci
Alors là chapeau si tu arrives a extraire du code C à partir de ton exe, j'aimerais bien savoir comment tu fais.

_____________________________________
Un éditeur de ressources gratuit pour Windows
Commenter la réponse de vecchio56
Messages postés
3982
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
9
0
Merci
Bah c'est facile avec un décompilateur.

Nan mais en fait, il extrait simplement un .exe d'un .exe.
Genre il a fait :
copy /B 1.exe+2.exe 12.exe


Et maintenant il veut récupérer 2.exe, pour pouvoir l'exécuter par exemple.
Commenter la réponse de cs_rt15