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

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    octobre 2018
    Messages
    9
    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 : 9
    Points : 5
    Points
    5
    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
    Modérateur

    Avatar de Winjerome
    Homme Profil pro
    Inscrit en
    septembre 2009
    Messages
    10 492
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : septembre 2009
    Messages : 10 492
    Points : 60 934
    Points
    60 934
    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.
    Avant de poser votre question : FAQ, Tutoriels et recherche sur le forum
    Une erreur ? Messages d'erreur et avertissements
    "Ça ne marche pas" n'apporte aucune information utile permettant de vous aider. Expliquez clairement votre problème (erreurs entières, résultat souhaité vs obtenu...).
    En essayant continuellement on finit par réussir. Donc: plus ça rate, plus on a de chance que ça marche. - Jacques Rouxel
    L'expérience, c'est le nom que chacun donne à ses erreurs - Oscar Wilde
    Mes extensions FireDVP (Firefox), ChroDVP (Chrome) : suivi des nouveaux messages, boutons/raccourcis et bien plus !

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    octobre 2018
    Messages
    9
    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 : 9
    Points : 5
    Points
    5
    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

Discussions similaires

  1. Réponses: 0
    Dernier message: 29/10/2014, 17h46
  2. Réponses: 5
    Dernier message: 22/02/2008, 14h08
  3. Exécutable sous JBuilder
    Par biglong dans le forum JBuilder
    Réponses: 4
    Dernier message: 29/05/2005, 16h39
  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, 11h55
  5. Réponses: 2
    Dernier message: 27/02/2003, 02h33

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