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

Windows Discussion :

Exe's et format PE


Sujet :

Windows

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 76
    Points : 52
    Points
    52
    Par défaut Exe's et format PE
    Bonjour,

    Je suis entrain d'écrire une programme analyseur de .exe qui récupère le maximum d'informations possible mais j'ai un petit problème.
    J'ai un document de Wotsit qui indique:
    If the word value at offset 18h is 40h or greater, the word value at 3Ch is typically an offset to a Windows header.
    J'ai bien l'offset 0x18 de l'exécutable qui vaut 40.
    Donc je dois aller à l'offset 0x3C ce que je fais mais là, je ne suis plus:
    The following list summarizes the contents of the header information block (the locations are relative to the beginning of the block):
    00h Specifies the signature word. The low byte contains "N" (4Eh) and the high byte contains "E" (45h).
    Ca ne fonctionne pas, j'ai beau chercher dans tout le fichier avec une éditeur hexa, il n'y a aucun "NE" dans tout celui-ci.
    Donc, le document est surment "vieux" ?
    Mais alors, je voudrais savoir où puis-je trouver ce Windows Header (après le MS-DOS header) car j'ai besoin d'infos comme celle-là:
    0Ch Specifies flags that describe the contents of the executable file. This value can be one or more of the following bits:

    Bit Meaning

    0 The linker sets this bit if the executable-file format is SINGLEDATA. An executable file with this format contains one data segment. This bit is set if the file is a dynamic-link library (DLL).
    Je le trouve où ce bit ?
    J'ai beau parcourir les offsets, je ne le vois pas.

    P.S. Je ne savais pas bien où poster, j'éspère que le forum sera adéquois.

    Merci

  2. #2
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut Re:
    Tout d'abord si ma mémoireest bonne le mot magique n'est pas un mot mais un double mot (4 octets) et s'écrit en little-endian "PE\0\0". L'en-tête DOS commence quand à elle avec "MZ". Et enfin, toutes les structures (IMAGE_DOS_HEADER et compagnie ...) dont tu as besoin pour naviguer dans le PE sont déclarées dans winnt.h

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 76
    Points : 52
    Points
    52
    Par défaut
    Merci de ta réponse.
    Tu veux dire que le "NE" n'est plus, mais c'est enfait "PE" en DWORD ?
    Quant à le header DOS, oui je sais très bien, je cherchais le header Windows.

    Je cours voir winnt.h...

    @ edit >> J'ai compris ! Je peux continuer mon analyse.
    Merci encore
    @re-edit >> J'ai finalement une autre petite question:
    Je lis dans ce même document:
    Location Description

    00h Specifies the signature word. The low byte contains "N" (4Eh) and the high byte contains "E" (45h).
    02h Specifies the linker version number.
    03h Specifies the linker revision number.
    04h Specifies the offset to the entry table (relative to the beginning of the header).
    06h Specifies the length of the entry table, in bytes.
    08h Reserved.
    0Ch Specifies flags that describe the contents of the executable file. This value can be one or more of the following bits:
    Donc le mot de signature (PE) fait pour ce document un WORD alors que sur MSDN on peut voir que ça fait un DWORD ; je suppose que c'est MSDN qui a raison ?
    Mais alors quand le document dit: 03h: linker revision number etc. je dois aussi décaler ça de 2 bits puisque la signature faisait Double mot ?

    J'éspère que j'ai été clair, je ne crois pas...
    @re-edit >> Désolé pour le 3eme édit, apparement ça fonctionne très bien pour trouver l'entry point du Windows Header mais après, pour l'analyser ça n'a pas l'air de fonctionner, celon le document (qui est de Microsoft):
    Bit Meaning
    0 The linker sets this bit if the executable-file
    format is SINGLEDATA. An executable file with
    this format contains one data segment. This bit
    is set if the file is a dynamic-link library
    (DLL).
    Alors que j'ai testé une DLL et le bit 0 de l'offset "WindowsHeader entrypoint" + 0Ch = 0; screen:
    http://img149.imageshack.us/img149/3364/18124950oy2.jpg

  4. #4
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    Bonjour,

    tu as du te tromper de format, d'après ce que je vois sur ton screenshot (le format NE est différent du format PE). Le format NE n'est plus utilisé aujourd'hui, c'était le format des exécutables 16 bits.

    Par exemple sut ton screenshot, à l'offset 0xF4, on voit la valeur 0x14C qui est la valeur IMAGE_FILE_MACHINE_I386 pour le champ IMAGE_FILE_HEADER.Machine.

    Juste après la signature (PE\0\0) on trouve un IMAGE_FILE_HEADER et ensuite un IMAGE_OPTIONAL_HEADER. La signature + IMAGE_FILE_HEADER + IMAGE_OPTIONAL_HEADER format un IMAGE_NT_HEADERS.

    Tu trouvera la spécification complète du format PE ici :

    http://www.microsoft.com/whdc/system...re/PECOFF.mspx

    Le parsing du format PE est quelque chose d'assez complexe du fait que le chargeur Windows accepte de charger des fichiers PE s'éloignant parfois très loin du format standard...

    Si tu as besoin d'un peu d'aide concernant ce format, n'hésites pas.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 76
    Points : 52
    Points
    52
    Par défaut
    Ah, voila !
    J'étais justement entrain de me poser la question.

    Merci de me l'avoir précisé.
    Au moins j'ai un programme qui parse les exe. 16bits alors... (enfin presque)

    Merci beaucoup pour le lien vers la doc.
    Je n'hésiterai pas à poser pleins de question =)

    P.S. Oui, je sais que le LoaderPE accepte les exe. avec beaucoups de différences mais y a t-il une méthode 'spécifique' (meilleure) pour parser les exe. 32bits ?

    Merci

Discussions similaires

  1. Réponses: 6
    Dernier message: 19/05/2010, 15h42
  2. problème d'affiche d'une diapo de format exe sur la page web
    Par kitcarson23 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 02/06/2008, 16h47
  3. Le format EXE
    Par Xhéras dans le forum Windows
    Réponses: 5
    Dernier message: 14/09/2006, 15h34
  4. Explication sur le format .exe
    Par Janitrix dans le forum Windows XP
    Réponses: 4
    Dernier message: 04/06/2006, 13h58
  5. Format d'un exe pour DOS et pour Windows
    Par Alfhiger dans le forum Assembleur
    Réponses: 4
    Dernier message: 12/06/2002, 11h57

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