IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Discussion :

Lecture d'un exécutable sous la forme de tableau d'octets


Sujet :

Qt

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 19
    Points : 16
    Points
    16
    Par défaut 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Ton problème vient de la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    _sizeData = sizeof(_shellcode);
    L'opérateur sizeof ne renvoie pas la taille de ce qui vient d'être lu, mais la taille de la variable en mémoire (= sizeof(QByteArray)), indépendante de la taille du fichier lu.
    Il te faut utiliser à la place la fonction membre size() de QByteArray :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    _sizeData = _shellcode.size();
    Cependant, tu mentionnes en commentaire // _sizeData est un unsigned char, je rappelle au cas où que la valeur maximale de ce type est de 255.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 19
    Points : 16
    Points
    16
    Par défaut
    Tout d'abord merci beaucoup de ta réponse winjerome.
    En effet, size() fonctionne beaucoup mieux j'obtiens bien la taille attendue.
    J'ai également regardé pour le type de _sizeData, autant pour moi je me suis trompé je l'avais désigné comme étant un int (peut-être qu'un long int serait plus approprié à l'avenir selon la taille des fichiers lus...).
    Maintenant mon qDebug() n'affiche plus les octets mais ca ne doit pas être sorcier, je retourne à mes recherches.

    Encore merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 29/10/2014, 16h46
  2. Réponses: 5
    Dernier message: 22/02/2008, 13h08
  3. Exécutable sous JBuilder
    Par biglong dans le forum JBuilder
    Réponses: 4
    Dernier message: 29/05/2005, 15h39
  4. XSL pour visualiser arbre XML sous forme de tableau en HTML
    Par mattmat dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 28/03/2003, 10h55
  5. Réponses: 2
    Dernier message: 27/02/2003, 01h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo