Un exécutable compressé par UPX ne ressemble plus à un programme Visual Basic. Son point d'entrée est le petit décompresseur qu'UPX y a ajouté, ses sections sont compressées, l'en-tête du projet VB6 a disparu. Un décompilateur VB6 qui lit ces octets tels quels conclut, à juste titre, qu'il n'y trouve aucun programme VB6.
VBReFormer Gen2 (V7) ouvre désormais ces binaires comme les autres. Il les décompresse à l'ouverture, sans jamais les exécuter, puis reconstruit la structure du PE d'origine avant de l'analyser. Rien à préparer : déposez le fichier tel quel.

DemoNat.exe compressé par UPX 5.2.1 (14 Ko), ouvert dans VBReFormer Online : le projet est retrouvé et les appels au runtime (__vbaVarDup, __vbaVarMod) sont nommés, preuve que la table d'imports a été reconstruite.Décompresser sans exécuter
La méthode habituelle pour se débarrasser d'UPX consiste à lancer le programme et à le laisser se décompresser en mémoire, ou à passer par un outil externe. Sur un binaire dont on ignore l'origine, et a fortiori sur un malware, lancer le programme n'est pas une option.
VBReFormer fait tout le travail de manière statique : le décompresseur d'UPX n'est jamais exécuté, aucun processus n'est lancé, rien n'est émulé. Le binaire est lu comme une donnée, décompressé, puis analysé. C'est la règle de tout le produit : VBReFormer n'exécute jamais ce qu'il analyse.
La décompression se fait à l'ouverture du binaire, une seule fois, et sert à toutes les vues. Elle est bornée en taille et en durée : un fichier forgé ne peut pas décider de la mémoire ni du temps consacrés à son analyse.
Reconstruire la structure du PE
Décompresser les sections ne suffit pas : pour être lisible, l'image doit redevenir un PE cohérent, avec ses sections, ses en-têtes et sa table d'imports. C'est ce que vérifie notre mesure : l'image reconstruite par VBReFormer est comparée, octet par octet, à celle que produit upx -d, l'outil officiel d'UPX.
| Mesure du 23 octobre 2026 | Résultat |
|---|---|
| Binaires compressés par UPX 5.2.1 et 3.96 | 186 |
Images identiques à upx -d | 178 |
| Images qui ne diffèrent que par l'horodatage d'export | 8 (DLL et OCX) |
| Échecs | 0 |
Il reste un point qu'UPX ne restitue pas, même avec upx -d : la table des noms d'imports (OriginalFirstThunk) revient vide. Un lecteur PE ordinaire perd alors toute la liste des fonctions importées, et avec elle les noms des appels au runtime MSVBVM60.DLL. VBReFormer reconstruit cette table avant de lire le binaire. Les appels redeviennent __vbaStrCat ou __vbaVarDup au lieu d'adresses anonymes. La correction vaut pour tout binaire, y compris un fichier que vous auriez déjà décompressé vous-même avec upx -d.
Le moteur délimite aussi la section de code à partir du répertoire d'imports, pour ne jamais prendre les données d'import d'une image décompressée pour du code.
Le même projet qu'avec l'original
La preuve qui compte est la sortie finale. Sur les 14 binaires de l'épreuve automatique, le projet exporté depuis la version compressée est identique, fichier par fichier et ligne par ligne, à celui exporté depuis le binaire d'origine. Ces 14 binaires couvrent le code natif et le P-code, des exécutables, des DLL ActiveX et des contrôles OCX.
Même résultat sur notre plus gros témoin, un exécutable de 9,35 Mo compressé en LZMA : 57 049 lignes de projet, identiques à celles de l'original.
| Témoin de 9,35 Mo | Durée de la décompression |
|---|---|
| Compression NRV (réglage par défaut d'UPX) | 0,1 s |
| Compression LZMA | 0,65 s |
Autrement dit, la décompression est imperceptible devant l'analyse elle-même.
Une seule session, sur l'image décompressée
Une fois le binaire décompressé, toute la session travaille sur l'image reconstruite : la source, le désassemblage, la carte du format et le correctif binaire. Une adresse affichée dans une vue est donc la même dans toutes les autres. Le nom du fichier et son empreinte restent ceux du fichier que vous avez déposé : c'est lui que vous analysez.
Pour qui, et où
- Toutes les éditions, y compris sans licence. La décompression a lieu à l'ouverture du binaire, avant tout contrôle de licence : l'aperçu gratuit en profite comme les licences payantes.
- Bureau et studio en ligne. Les deux passent par le même service d'analyse. Dans VBReFormer Online, il suffit de déposer le fichier.
- Natif et P-code, EXE, DLL et OCX.
Ce que VBReFormer dit quand il ne peut pas
Un binaire reconnu comme compressé par UPX, mais que VBReFormer ne parvient pas à décompresser, est analysé tel quel, avec un avertissement qui donne la raison. Vous ne lisez donc pas « ce n'est pas un programme VB6 » quand la vraie réponse est « c'est un programme VB6 compressé que je n'ai pas pu ouvrir ».
Les autres packers et protecteurs sont reconnus et nommés à l'ouverture : ASPack, PECompact, MPRESS, FSG, MEW, Upack, NsPack, PEtite, Themida, VMProtect, Armadillo, ASProtect et Enigma. Ils ne sont pas encore décompressés, mais vous savez à quoi vous avez affaire au lieu d'un simple refus.
Après UPX viendront ASPack, MPRESS et PECompact, avec la même décompression intégrée, sans exécution. Les protecteurs comme Themida ou VMProtect resteront reconnus et nommés, mais jamais exécutés : les lever exigerait de faire tourner le binaire, ce que VBReFormer ne fait pas.
Pourquoi c'est important
UPX est l'un des packers les plus répandus, dans les logiciels légitimes comme dans les malwares. Pour la récupération de code, c'est un vieil exécutable dont personne ne se rappelait qu'il avait été compressé. Pour l'analyse de malware, c'est l'une des premières couches que l'on rencontre sur un binaire Visual Basic 6 : nous en parlions dans Pourquoi les campagnes de malware reviennent au Visual Basic 6. Dans les deux cas, la réponse est désormais la même : déposez le fichier, VBReFormer s'occupe du reste.
Essayer
- VBReFormer Online : déposez un exécutable VB5/VB6, compressé ou non.
- Télécharger la version gratuite pour le bureau.
- VBReFormer V7 : le moteur réécrit