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.

AuteurPublication
Alex IonescuVisual Basic Image Internal Structure Format
Andrea GeddonVisual Basic Reversed — A decompiling approach
John ChamberlainMicrosoft's P-Code Implementation (2001)
Richard Marko (Eset)VB Wearing the Inside Out (2002)
Mr SilverVB P-code Information
Sanchit KarveDisassembling Visual Basic Applications, I et II
Reginald WongScript IDA pour VB6 (vb.idc)
Jurriaan Bremer, Marion MarschalekPré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 auteurOrigineActivité connueApprocheÉtat
VBDis 3, 4, 5
Hans-Peter Diettrich (DoDi)
Allemagne1994 → début des années 2000Statique — VB1, VB2 et VB3 ; VBDis4 et VBDis5 nettement moins completsArrêté
NuMega SmartCheck
NuMega
États-UnisOctobre 1997Dynamique — débogage à l'exécution, livré dans DevPartner StudioAbandonné
VBReFormer
Warning (Sylvain Bruyere)
France1999 → V6, V7 annoncéeStatique — VB5 et VB6, P-Code et natifActifMaintenuSupportV7 bientôt
Semi VB Decompiler
vbgamer45
2004 → 2.0, juin 2026Statique — P-Code, natif, .NETActifMaintenuOpen source

DotFix Software
Russie2005 → 2026Statique — P-Code et natifActifMaintenuCommercial
P32DasmAnnées 2000 → 2.8, mars 2016Statique — P-Code, VB5 et VB6Arrêté
VB RezQ2001 → 3.3Statique — squelette de projet, VB4/32 à VB6Arrêté
WKTVBDE
Mr Silver, Mr Snow
Années 2000 → 4.3Dynamique — débogueur P-CodeArrêté
RACEVB6Années 2000StatiqueArrêté
vbdec
David Zimmer (sandsprite)
Statique et dynamique — format, P-Code, débogueurActifGratuit
vb6tracer
Jurriaan Bremer, Marion Marschalek
Années 2010Dynamique — traçagePublié

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.

19942000201020202026
VBDis 3, 4, 5
VBReFormer
VB RezQ
Semi VB Decompiler
VB Decompiler
P32Dasm

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.

1986
Hans-Peter Diettrich, dit « DoDi »Désassembleurs et décompilateurs C sur Atari ST, puis Amiga et HP-UX.
1994
VBDis3Premier décompilateur Visual Basic. Cible VB1, VB2 et VB3. VBDis4 et VBDis5 suivront, nettement moins complets. La maintenance s'arrête discrètement au début des années 2000.arrêté
1997
Visual Basic 5Ajout de la compilation en code natif, avec le compilateur optimisant de Visual C++. Le domaine se scinde en deux problèmes.
1998
Visual Basic 6Dernière version de la lignée. Le format qu'elle fixe n'a pas changé depuis : c'est celui que tous les outils suivants ciblent.
1999
VBReFormerAuteur : Warning (Sylvain Bruyere). Première licence vendue en 2000 ou 2001.en développement en 2026
années 2000
decompiler.theautomaters.comForum où la description du format VB6 est mise en commun.retiré
2004
Semi VB Decompiler · vbgamer45Commercial à ses débuts.
2005
Premières versions publiques. La 0.4 circule sur le CD du magazine de sécurité russe Hacker (Xakep), numéro 7 de 2005.toujours en vente
28 mars 2016
P32Dasm 2.8Dernière version connue.arrêté
en ligne
vbdec · sandspriteVisualiseur de format, désassembleur P-Code, débogueur. Crédite vbgamer45 et le forum.

É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.