Qu'est-ce qu'un fichier PE ?
PE (Portable Executable) est le format des programmes Windows : .exe, .dll, pilotes .sys, .scr, .cpl, .ocx et binaires EFI. Il commence par un en-tête MS-DOS (« MZ »), puis une signature PE, un en-tête de fichier COFF, un en-tête optionnel avec 16 répertoires de données et une table des sections qui décrit le placement en mémoire.
L'analyse statique lit cette structure sans rien exécuter : ce que le fichier importe, quand et avec quoi il a été compilé, s'il est signé, ce qu'il transporte dans ses ressources et son overlay. C'est la première étape, sans risque, du tri de malwares.
Ce que lit cet outil
- En-têtes : DOS, COFF et en-tête optionnel (PE32 et PE32+), répertoires de données, table des sections avec tailles brutes et virtuelles, attributs et entropie par section, checksum recalculé.
- Imports (ordinaux de ws2_32, wsock32 et oleaut32 nommés), imports différés et liés, exports et redirections, imphash.
- Ressources : informations de version, manifeste, icônes, tables de chaînes, boîtes de dialogue, fichiers intégrés ; détection d'overlay.
- Rich header traduit en versions de Visual Studio, répertoire de débogage (chemin PDB, GUID, âge), callbacks TLS, configuration de chargement (CFG, SafeSEH), relocations.
- Authenticode : signataire, certificats, horodatage, empreinte du fichier face au condensé signé et vérification de la signature RSA. .NET : en-tête CLR, flux de métadonnées, assembly, références, P/Invoke, types.
- Chaînes (ASCII et UTF-16LE) catégorisées, MD5 / SHA-1 / SHA-256 / TLSH, heuristiques de packers et compilateurs, et un tableau de lot pour repérer les familles.
- Décompression : les fichiers packés avec UPX sont reconstruits avec leurs imports d’origine, et les exécutables cachés dans un fichier (stockés tels quels, encodés en XOR ou compressés en LZNT1, aPLib, zlib, gzip ou LZMA) sont extraits et analysés comme fichiers enfants.
Pourquoi c'est utile en investigation
- Empreintes et imphash permettent d'interroger le renseignement sur la menace et de regrouper les variantes d'un même outil ; TLSH mesure la proximité de deux fichiers.
- Les dates de compilation, de débogage et de signature datent un outil, et leurs désaccords trahissent des retouches.
- Imports et chaînes montrent les capacités (réseau, injection, persistance) et les indicateurs (URL, IP, chemins, clés de registre).
- Informations de version, chemins PDB et Rich header renseignent sur l'environnement de l'auteur ; une signature dit qui s'est porté garant du fichier.
Limites
- Uniquement statique : UPX est décompressé dans le navigateur, mais les autres packers, les protecteurs et le code chiffré doivent être décompressés ailleurs avant que leurs vrais imports et chaînes n’apparaissent.
- Les chaînes de certificats ne sont pas validées (pas de magasin de confiance ni de révocation) : l'outil vérifie l'intégrité, pas la confiance.
- La détection de packers repose sur quelques heuristiques, pas sur une base de signatures comme celle de Detect It Easy.
- Pas de désassemblage ni d'émulation ; pas de ssdeep (aucune implémentation sous licence permissive).
Comment récupérer les fichiers
- Partez des artefacts d'exécution (Prefetch, Amcache, services, tâches) pour obtenir les chemins exacts, puis copiez ces fichiers sans les lancer.
- Sur une machine allumée, balayez les dossiers inscriptibles avec PowerShell ou collectez les binaires en cours avec Windows.Triage.Targets (_Live) de Velociraptor.
- Conservez l'arborescence et calculez les empreintes avant toute analyse.
FAQ
Le fichier est-il envoyé ou exécuté ?
Ni l'un ni l'autre. L'analyseur est écrit en Rust, compilé en WebAssembly et tourne dans un Web Worker de votre navigateur. Il se contente de lire les octets : ni émulation, ni bac à sable, ni point d'envoi.
Peut-il dire si un fichier est un malware ?
Aucun outil ne le peut à partir des seules données statiques. Il montre des faits (imports, signature, packer, dates) et des indicateurs expliqués qui méritent un coup d'œil. Croisez-les avec le contexte, le renseignement et, si besoin, une analyse dynamique en bac à sable.
Vérifie-t-il les signatures comme Windows ?
En partie. Il recalcule l'empreinte Authenticode et la compare au condensé signé, puis vérifie la signature RSA du signataire avec le certificat intégré. Il ne vérifie pas que la chaîne aboutit à une racine de confiance ni qu'un certificat a été révoqué : cela exige un magasin de confiance et des données en ligne.
Peut-il décompresser UPX et extraire des charges cachées ?
Oui, statiquement. Les EXE et DLL packés avec UPX (32 et 64 bits, toutes les méthodes de compression, y compris avec un en-tête altéré qui fait échouer upx -d) sont décompressés comme des données et reconstruits avec leurs imports d’origine, si bien que l’imphash correspond au build d’origine. Les exécutables cachés dans un fichier, stockés tels quels, encodés en XOR ou compressés en LZNT1, aPLib, zlib, gzip ou LZMA, sont aussi extraits. Chacun est ajouté comme fichier enfant et peut être enregistré dans un ZIP protégé par le mot de passe infected.
Comment l'imphash est-il calculé ?
Exactement comme pefile : paires « dll.fonction » en minuscules (extension .dll, .ocx ou .sys retirée, ordinaux de ws2_32, wsock32 et oleaut32 nommés avec les tables de pefile, les autres en ordN), jointes par des virgules, puis MD5. Les imports différés ne sont pas inclus.
Quelle différence avec pestudio, PE-bear ou Detect It Easy ?
Il réunit sur une seule page, sans installation, les vues les plus utilisées de ces outils, traite un lot de fichiers d'un coup (empreintes, familles d'imphash, plage horaire, comparaison) et n'oblige jamais à copier l'échantillon sur une VM d'analyse. Ces outils vont plus loin dans leurs spécialités : désassemblage, bases de signatures, édition.