Format Windows Portable Executable
Vue d’ensemble
Windows Portable Executable (Windows PE) est un format de fichier utilisé pour enregistrer les exécutables propres aux systèmes d’exploitation Windows sur un support de stockage.
La structure de ce format permet non seulement de stocker sur le disque les instructions et les données d’un programme mais aussi des informations qui permettent à Windows (→ le Loader) de charger et d’exécuter ce programme en mémoire.
La connaissance de ce format est utile dès lors qu’on est amené à analyser des exécutables pour s’assurer de leur inocuité vis à vis du système d’informations de l’entreprise. En effet, l’altération des informations contenues dans un fichier au format PE (→ malformed PE) est signe d’un fichier corrompu. Par exemple, il est possible de modifier les informations contenues dans un fichier au format PE pour y camoufler du code malveillant.
Dans la suite de ce document, on s’appuiera sur l’utilisation du logiciel PE-bear Cet outil Open Source est décrit par son auteur comme “un outil gratuit et multiplateforme d’analyse des fichiers PE […]. Son objectif est de fournir une « première vue » rapide et flexible pour les analystes de logiciels malveillants, stable et capable de traiter des fichiers PE malformés.” |
Structure d’un fichier PE
L’ouverture d’un exécutable (ici md5sum.exe
) dans PE-Bear révèle sa structure globale :
On retrouve principalement des informations de 2 types :
-
des entêtes (→ headers) : DOS Header, NT Headers, Section Headers
Ces entêtes contiennent des multitudes d’informations qui vont permettre au loader Windows de charger en mémoire le fichier exécutable pour en faire un processus, c’est-à-dire un programme “en cours d’exécution”. À ce titre, elles ne seront pas présentes en mémoire à l’issue du chargement.
-
des sections : .text, .data, .rdata, …
Les sections représentent le contenu à proprement parler du programme. Notamment, les instructions qu’il doit exécuter, ses données, les références vers les fonctions importées des bibliothèques partagées (→ fichiers .dll) qu’il utilise.
À l’inverse des informations présentes dans les entêtes, le contenu des sections donne une image de ce qui sera réellement présent en mémoire.
Ressources
-
Série de 2 articles parus dans la revue Misc
:
🞄 🞄 🞄