Extraction hexadécimale d'un éxécutable

Résolu
Nixeus Messages postés 192 Date d'inscription jeudi 18 janvier 2007 Statut Membre Dernière intervention 19 octobre 2020 - 16 juil. 2009 à 11:54
cs_rt15 Messages postés 3874 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'

9 réponses

cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
17 juil. 2009 à 16:04
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.
3
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
16 juil. 2009 à 12:22
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.
0
Nixeus Messages postés 192 Date d'inscription jeudi 18 janvier 2007 Statut Membre Dernière intervention 19 octobre 2020
16 juil. 2009 à 14:18
Merci beaucoup, je regarde cela !

Nixeus'
0
Nixeus Messages postés 192 Date d'inscription jeudi 18 janvier 2007 Statut Membre Dernière intervention 19 octobre 2020
17 juil. 2009 à 12:22
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'
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
17 juil. 2009 à 14:06
0x
0
Nixeus Messages postés 192 Date d'inscription jeudi 18 janvier 2007 Statut Membre Dernière intervention 19 octobre 2020
17 juil. 2009 à 15:16
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'
0
Nixeus Messages postés 192 Date d'inscription jeudi 18 janvier 2007 Statut Membre Dernière intervention 19 octobre 2020
17 juil. 2009 à 16:10
Merci beaucoup, tout fonctionne avec le write :)


Nixeus'
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 13
20 juil. 2009 à 19:14
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
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
21 juil. 2009 à 09:10
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.
0