La décompilation de Visual Basic est un domaine étroit, documenté par une poignée de personnes sur une trentaine d'années. Microsoft n'a jamais publié la structure interne des exécutables produits par ses compilateurs VB ; tout ce qui est connu du format a été établi par rétro-ingénierie, puis mis en commun sur des forums aujourd'hui disparus. Cette notice recense les outils, leurs auteurs et leurs dates.
1994 : VBDis, le premier décompilateur Visual Basic
Hans-Peter Diettrich, développeur allemand connu sous le pseudonyme DoDi, pratiquait la rétro-ingénierie depuis 1986 : d'abord sur Atari ST, puis sur Amiga et HP-UX, où il écrivait des désassembleurs et des décompilateurs C.
En 1994, il établit que les exécutables produits par Visual Basic 3 conservent assez d'information pour qu'on en reconstruise le projet, et publie VBDis3. VBDis4 et VBDis5 suivront, nettement moins complets, le format ayant changé entre-temps. Le journaliste Tim Anderson, qui a utilisé l'outil sur un cas réel, note que le code revient mais que les noms de variables sont « mangled » et qu'il faut deviner leur rôle.
L'outil a connu un sort particulier : il a lui-même été décompilé, puis porté en VB6 par un tiers.
1997 : la rupture technique de Visual Basic 5
Jusqu'à Visual Basic 4, le compilateur ne produisait qu'une seule sorte de sortie : du P-Code, exécuté par une machine virtuelle livrée avec l'application. Visual Basic 5 ajoute une seconde cible, la compilation en code machine x86, confiée au compilateur optimisant de Visual C++. Cette bifurcation divise durablement le domaine en deux problèmes distincts.
Cible P-Code
Bytecode dont chaque instruction correspond à une opération du langage. La reconstruction est largement mécanique.
Seule cible disponible jusqu'à VB4, puis option minoritaire, le natif devenant le réglage par défaut.
Cible code natif
x86 optimisé : instructions réordonnées, constantes propagées, types non déclarés.
Format de la majorité des applications réellement distribuées à partir de VB5.
Cette distinction commande tout le reste du domaine. Elle est traitée en détail dans du P-Code au MSIL et dans ce que rend un binaire selon son mode de compilation.
Deux familles d'outils
L'outillage se répartit en deux approches, rarement combinées.
Analyse statique
- Lit le fichier sans l'exécuter
- Reconstruit projet, formulaires, contrôles, procédures
- VBDis, VBReFormer, VB RezQ, P32Dasm, Semi VB Decompiler, vbdec
- Limite : ce que le compilateur a supprimé est perdu
Analyse dynamique
- Observe le programme en cours d'exécution
- Accroche les gestionnaires du runtime, trace les appels
- WKTVBDE, NuMega SmartCheck, vb6tracer
- Limite : ne restitue pas de code source, et suppose un binaire exécutable
Les années 2000 : la connaissance mise en commun
Le format VB6 n'étant documenté nulle part, sa description a été reconstituée collectivement. Le point de rassemblement principal fut le forum decompiler.theautomaters.com, aujourd'hui retiré : structures de description du projet, table des opcodes P-Code, dispositions mémoire des objets COM y étaient échangées librement. Les contributeurs cités par les outils de l'époque sont Sarge, Napalm, Mr. Unleaded, Moogman, _aLfa_, Alex Ionescu, Brad Martinez et Warning (Sylvain Bruyere).
Une partie de ce travail a été publiée sous forme d'articles, qui constituent la littérature de référence du domaine.
| Auteur | Publication |
|---|---|
| Alex Ionescu | Visual Basic Image Internal Structure Format |
| Andrea Geddon | Visual Basic Reversed — A decompiling approach |
| John Chamberlain | Microsoft's P-Code Implementation (2001) |
| Richard Marko (Eset) | VB Wearing the Inside Out (2002) |
| Mr Silver | VB P-code Information |
| Sanchit Karve | Disassembling Visual Basic Applications, I et II |
| Reginald Wong | Script IDA pour VB6 (vb.idc) |
| Jurriaan Bremer, Marion Marschalek | Présentation de VB6 Tracer |
Les outils
VBReFormer est écrit à partir de 1999 par Sylvain Bruyere, alors au collège, sous le pseudonyme Warning ; la première licence est vendue en 2000 ou 2001. En octobre 2002, l'outil est en version 3.1 et se télécharge depuis une page hébergée chez Lycos sous le nom HexOrciser, à côté de VBEditor, signé Hexman. Il ne fait alors qu'une chose : récréer l'aspect visuel d'un projet — formulaires, contrôles, interface. Le site passera ensuite par decompiler-vb.tk avant son domaine actuel.
| Outil et auteur | Origine | Activité connue | Approche | État |
|---|---|---|---|---|
| VBDis 3, 4, 5 Hans-Peter Diettrich (DoDi) | Allemagne | 1994 → début des années 2000 | Statique — VB1, VB2 et VB3 ; VBDis4 et VBDis5 nettement moins complets | Arrêté |
| NuMega SmartCheck NuMega | États-Unis | Octobre 1997 | Dynamique — débogage à l'exécution, livré dans DevPartner Studio | Abandonné |
| VBReFormer Warning (Sylvain Bruyere) | France | 1999 → V6, V7 annoncée | Statique — VB5 et VB6, P-Code et natif | ActifMaintenuSupportV7 bientôt |
| Semi VB Decompiler vbgamer45 | — | 2004 → 2.0, juin 2026 | Statique — P-Code, natif, .NET | ActifMaintenuOpen source |
DotFix Software | Russie | 2005 → 2026 | Statique — P-Code et natif | ActifMaintenuCommercial |
| P32Dasm | — | Années 2000 → 2.8, mars 2016 | Statique — P-Code, VB5 et VB6 | Arrêté |
| VB RezQ | — | 2001 → 3.3 | Statique — squelette de projet, VB4/32 à VB6 | Arrêté |
| WKTVBDE Mr Silver, Mr Snow | — | Années 2000 → 4.3 | Dynamique — débogueur P-Code | Arrêté |
| RACEVB6 | — | Années 2000 | Statique | Arrêté |
| vbdec David Zimmer (sandsprite) | — | — | Statique et dynamique — format, P-Code, débogueur | ActifGratuit |
| vb6tracer Jurriaan Bremer, Marion Marschalek | — | Années 2010 | Dynamique — traçage | Publié |
Chronologie
Les durées d'abord : qui a tenu, et combien de temps. Trois outils seulement couvrent plus de vingt ans sans interruption documentée.
Trait plein : période documentée. Dégradé : borne imprécise ou inconnue — début inconnu pour P32Dasm, fin imprécise pour VBDis, fin inconnue pour VB RezQ. WKTVBDE, RACEVB6, vbdec et vb6tracer n'ont aucune date exploitable et ne figurent pas ici.
Et les jalons, outil par outil.
État du domaine en 2026
Sur les onze outils recensés, quatre sont encore développés ou disponibles : VBReFormer, Semi VB Decompiler, et vbdec. Les autres se sont arrêtés, le dernier en 2016. Le forum fondateur a disparu, et une partie de la littérature n'existe plus qu'en archive.
Le format, lui, n'a pas changé depuis 1998 : un exécutable VB6 compilé aujourd'hui aurait la même structure qu'en 1998, et la bibliothèque d'exécution reste supportée par Microsoft pour la durée de vie de chaque version de Windows. La connaissance accumulée sur ce format ne se périme donc pas.
La couverture de VBReFormer est publiée fonction par fonction et instruction par instruction, avec ses dénominateurs : 1 153 correspondances documentées. La version gratuite indique en quelques secondes de quel format relève un binaire et ce qu'il contient.