Lecture d'un exécutable sous la forme de tableau d'octets
Bonjour,
Dans le cadre d'un mémoire, je développe actuellement un programme permettant de sélectionner un fichier.exe, puis d'afficher son contenu sous forme d'octet à la manière d'un shellcode (\x45 \x76 \x00 ...)
Cependant, je suis en face d'un problème, voici mon programme:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| void MainWindow::generate_shellcode()
{
qDebug()<<"\t===========================================================\n\t=\t Génération du shellcode\t\t=\n\t===========================================================\n\n";
//int i; //On initialise le curseur i
//char c; //On initialise le curseur c
QFile fichier(_file_path);
if(fichier.open(QIODevice::ReadOnly)) //Si le fichier s'ouvre..
{
qDebug()<<"Fichier ouvert";
_shellcode = fichier.readAll(); //_shellcode etant un QByteArray
_sizeData = sizeof(_shellcode); //_sizeData est un unsigned char
qDebug()<<"La taille de data est: "<<_sizeData;
_shellcode.resize(_sizeData);
qDebug()<<"\nVoici le shellcode: \n"<<_shellcode<<"\n";
fichier.close();
}
else { //Sinon on affiche une erreur
qDebug()<<"Impossible d'ouvrir le fichier !";
QString err = "Impossible d'ouvrir le fichier !";
afficher_err(err);
}
} |
Cependant, j'obtient le résultat suivant:
================================
= Génération du shellcode =
================================
Fichier ouvert
La taille de data est: 8
Voici le shellcode:
"MZ\x90\x00\x03\x00\x00\x00"
Or mon fichier en .exe est bien plus grand que 8 octets, et il me semble que la lecture de celui-ci s'arrête à cause des caractère \x00 (fin de ligne).
Je cherche donc comment contourner ce problème.
Merci d'avance de vos réponses.