Decompiler-VB.Net
FR
Connexion
VBReFormer Gen2 Moteur entièrement réécrit, P-code complet, et le studio en ligne en bêta publique. Lire l'annonce
Documentation
VBReFormer Desktop

Manuel VBReFormer Desktop

Manuel d'utilisation de VBReFormer Desktop : installer, activer sa licence, lire les sept vues, analyser un binaire, exporter un projet VB6 rechargeable.

Mis à jour le 20/09/202614 chapitres

L'application installée sur votre poste Windows. Elle ouvre vos exécutables Visual Basic 5 et 6, en reconstruit le code source, et vous rend un projet que l'IDE VB6 rouvre — avec l'outillage complet : octets, ressources, concepteur, graphes, références croisées et correctifs binaires.

1. Installer

VBReFormer Desktop est livré sous forme d'installateur MSI, un par langue d'interface. Le paquet est autonome : il embarque tout ce dont il a besoin, vous n'avez aucun framework à installer au préalable.

prérequis
Système Windows 10 version 1607 ou plus récent, ou Windows 11
Architecture x64
Framework aucun — le paquet est autonome
Connexion nécessaire pour la décompilation et la validation de licence
Langues d'interface français, anglais, espagnol

Windows XP, Vista, 7 et 8 ne sont pas pris en charge. L'application repose sur une plateforme qui exige Windows 10 au minimum. Si votre poste est plus ancien, VBReFormer Online fonctionne dans n'importe quel navigateur, sur n'importe quel système — c'est la voie recommandée dans ce cas.

Où travaille le moteur

L'application est locale ; la reconstruction du code, elle, s'exécute sur nos serveurs. C'est ce que signifie le nom de l'édition — Desktop + Cloud. Tout ce qui se lit dans le fichier (le format, les octets, le désassemblage, les ressources) est calculé sur votre poste ; tout ce qui se reconstruit passe par le service.

La boîte Aide ▸ À propos vous dit à tout moment la version du moteur joint, celle du contrat, et la liste des capacités servies — utile quand une fonction n'apparaît pas : si elle n'est pas dans cette liste, ce n'est pas l'interface qui la refuse.

2. Activer votre licence

Sans licence, l'application s'ouvre et travaille : vous pouvez explorer un binaire, lire le désassemblage en entier, les octets, les ressources et le concepteur. C'est la reconstruction du code VB6 et l'export du projet que la licence ouvre.

Un poste à la fois

Une licence VBReFormer ouvre un poste de travail à la fois. Si vous l'utilisez déjà ailleurs, l'application vous le dit clairement et vous propose deux issues : transférer la licence sur ce poste depuis votre compte, ou ajouter un poste.

C'est un refus doux : vous avez payé, il ne vous manque rien. Le message le dit ainsi plutôt que de vous renvoyer une erreur technique.

Un navigateur ouvert sur VBReFormer Online compte également pour un poste : le studio web et l'application de bureau consomment la même licence.

3. La fenêtre

  1. Ouvrez un binaire. Fichier ▸ Ouvrir un binaire VB6 (Ctrl+O). Les formats acceptés sont .exe, .dll, .ocx et .scr. La barre d'état affiche l'analyse en cours, puis le nom du fichier et sa forme de compilation — code natif ou P-code.
  2. Parcourez le panneau PROJET. À gauche, le binaire est présenté comme VB6 le voyait : formulaires, classes, modules, et leurs procédures. L'arbre se peuple à la demande — déplier un nœud demande ses enfants ; rien n'est calculé d'avance, ce qui garde l'ouverture rapide même sur un gros exécutable.
  3. Sélectionnez une procédure. Les vues de ce nœud s'affichent à droite. Si aucune vue n'est servie pour un nœud, le motif est écrit à l'écran plutôt qu'un panneau vide.

Les panneaux du bas

onglet à quoi il sert
Sortie le journal des opérations. Il conserve la langue dans laquelle chaque ligne a été écrite, même si vous changez la langue de l'interface — un journal est un relevé, pas un affichage.
Diagnostics ce que le moteur a refusé de faire, et pourquoi. Le réflexe à avoir dès qu'un résultat surprend.
Analyseur les références croisées : appelants d'une procédure, occurrences d'un symbole. Le résultat est cliquable.

La visibilité des membres

Chaque membre de l'arbre porte sa visibilité telle que le binaire la déclare — (Public), (Private), (Friend). Ce sont des mots-clés VB6 : ils ne sont pas traduits. Un membre dont la visibilité n'a pas pu être lue ne porte aucune marque : on n'écrit pas ce qu'on ne sait pas.

4. Les sept vues

Elles sont rangées en trois familles, et cette séparation vous dit d'où vient ce que vous lisez. C'est la chose la plus utile à comprendre.

Famille « Code » — reconstruit par analyse

vue ce qu'elle montre quand la consulter
Visual Basic 6 la source reconstruite, structurée par défaut — c'est ce que vous cherchez
IR la représentation intermédiaire pour voir ce que le moteur a compris
Assembleur les instructions machine x86 pour voir ce que le processeur exécute
P-code les opcodes de la machine virtuelle VB6 binaires P-code uniquement

Descendre cette liste, c'est remonter vers la machine. En cas de doute sur une ligne : Visual Basic 6 dit l'intention, Assembleur dit le fait.

Famille « Fichiers du projet » — lu, pas déduit

Concepteur (.frm), Projet (.vbp) et Structure. Rien ici ne passe par la reconstruction de code : tout a été lu dans des tables du binaire, et ce qui n'a pas pu l'être est écrit en toutes lettres plutôt que comblé. C'est la famille la plus fiable du produit, et celle qui ne dépend d'aucune inférence.

Famille « Ressources »

Voir le chapitre 9.

5. Ce que la compilation garde, et ce qu'elle jette

Ce chapitre explique pourquoi certaines parties de votre code ressortent presque intactes et d'autres avec des noms techniques. La règle est simple :

Ce dont Visual Basic a besoin pendant l'exécution, il l'a écrit dans le fichier : VBReFormer le retrouve. Ce dont il n'avait plus besoin après la compilation, il l'a jeté — et personne ne peut le retrouver.

Ce qui survit : noms des formulaires, classes et modules · noms des contrôles · gestionnaires d'événements · membres publics des classes · toutes les propriétés d'interface · appels au runtime VB (635 fonctions) · API Win32 (15 680 signatures) · la structure du code · les chaînes.

Ce qui n'est pas dans le fichier : les commentaires · les noms des variables locales · les noms des paramètres · les constantes nommées, remplacées par leur valeur · les noms des procédures de modules .bas · l'indentation d'origine · Option Explicit et les Enum.

La conséquence pratique. Vos formulaires ressortent très lisibles. Vos modules .bas ressortent justes, mais avec des noms techniques (proc_42C506). La fonction Renommer (F2) existe pour ça, et elle propage le nouveau nom à tous les sites d'appel du projet — voir le chapitre 7.

Deux exemples vérifiables

Les extraits ci-dessous viennent de SETUP1.EXE, l'assistant d'installation livré avec Visual Basic 6. Microsoft en distribue le code source dans le même dossier — vous pouvez donc refaire la comparaison vous-même.

Une procédure de module .bas

Source d'origine, COMMON.BAS :

Sub AddDirSep(strPathName As String)
    If Right(Trim(strPathName), Len(gstrSEP_URLDIR)) <> gstrSEP_URLDIR And _
       Right(Trim(strPathName), Len(gstrSEP_DIR)) <> gstrSEP_DIR Then
        strPathName = RTrim$(strPathName) & gstrSEP_DIR
    End If
End Sub

Rendu par VBReFormer :

Public Sub proc_42C506(ByRef arg_8 As String)
    If ((Right(Trim(arg_8), Len("/")) <> "/") And (Right(Trim(arg_8), Len("\")) <> "\")) <> 0 Then
        arg_8 = (RTrim$(arg_8) & "\")
    End If
End Sub

Logique identique, ligne pour ligne. Right, Trim, Len, RTrim$ sont nommés ; le passage ByRef est correctement déduit. En revanche le nom de la procédure et celui du paramètre sont perdus, et les constantes apparaissent sous leur valeur — c'est le compilateur qui les a remplacées, pas VBReFormer.

Un gestionnaire d'événement

Source d'origine, BEGIN.FRM :

Private Sub cmdExit_Click()
    ExitSetup Me, gintRET_EXIT
End Sub

Rendu par VBReFormer :

Private Sub cmdExit_Click()
    Set var_18 = Me
    basSetup1.proc_41CE2D var_18, var_1C
End Sub

Le nom du formulaire, celui du bouton et celui du gestionnaire sont intacts ; Me est reconnu ; le module appelé est nommé, ce qui vous dit où aller. Seule la procédure appelée, qui vit dans un .bas, garde son nom d'adresse.

Les marqueurs

VBReFormer ne devine jamais. Une valeur qui ne peut pas être établie est marquée plutôt qu'inventée — une valeur vraisemblable et fausse est le pire résultat qu'un décompilateur puisse produire.

marqueur signification que faire
proc_42C506 procédure désignée par son adresse la renommer (F2)
var_18, arg_8 variable locale ou paramètre lire son usage, puis renommer
vtbl_3C appel par table virtuelle non résolu l'explorateur d'objets dit souvent de quelle bibliothèque il s'agit
? valeur non établie consulter la vue Assembleur au même endroit

Un fichier contenant un ? sera refusé par l'IDE VB6. Le marqueur est là pour que vous décidiez, pas pour être recompilé tel quel.

6. Les outils d'analyse

C'est ici que l'édition bureau se distingue le plus : elle offre un établi complet, là où le studio web se concentre sur lire, décompiler et exporter.

outil raccourci ce qu'il vous apporte
Analyser les références Maj+F12 appelants d'une procédure, occurrences d'un symbole — résultat cliquable, et la couverture est chiffrée : ce que l'analyse ne voit pas est compté, pas tu
Liste des symboles Ctrl+Maj+S l'inventaire complet, filtrable par nature et par périmètre — il distingue les noms lus des noms synthétisés
Graphe des appels Ctrl+Maj+A qui appelle quoi, à trois échelles, avec filtres appelants / appelés
Graphe de flot Ctrl+Maj+G la forme d'une procédure : blocs, boucles, arêtes arrière, blocs inatteignables
Explorateur d'objets Ctrl+Maj+B « où est défini ceci ? » quand la réponse est hors du binaire
Navigateur d'API Win32 Ctrl+Maj+P prototypes, alias et notes des déclarations Win32
Bibliothèques citées Ctrl+K ce dont le binaire dépend
Programmes VB du disque Ctrl+L retrouver les exécutables VB d'un dossier
Rechercher Ctrl+Maj+F recherche de texte dans les vues servies
Signets Ctrl+F2 marquer des endroits, y revenir (F8 / Maj+F8)
Navigation avant / arrière Alt+← Alt+→ comme un navigateur

Pourquoi la couverture est chiffrée. Le graphe d'appels natif voit les appels directs ; il ne voit pas les appels par table virtuelle ni les pointeurs de fonction. Plutôt que de présenter une liste partielle comme complète, VBReFormer affiche ce qu'il omet, compté. Vous savez ainsi jusqu'où faire confiance au résultat.

7. Renommer

C'est le geste central du travail sur un binaire : le décompilateur vous rend la logique, vous lui rendez les noms. F2 sur un symbole, ou depuis la liste des symboles.

La boîte affiche trois choses que les décompilateurs cachent d'ordinaire :

  • l'origine du nom courant — donné par vous, inféré par le décompilateur, ou reconstruit ;
  • les propositions du décompilateur, chacune avec sa priorité et la source d'où elle vient ;
  • le nom d'origine, sur lequel on peut toujours revenir.

Le renommage est global. Renommez une procédure une fois, et les sites d'appel des autres modules suivent — y compris ceux que vous n'avez pas encore ouverts.

Un renommage refusé l'est toujours avec son motif. Deux cas fréquents : le moteur n'annonce pas la capacité de renommer sur ce document, ou bien la vue courante ne porte que des fragments lexicaux — de quoi colorer le texte, pas de quoi désigner une entité. Dans les deux cas le message le dit, plutôt que de ne rien faire.

8. Octets et correctifs binaires

Naviguer ▸ Voir les octets (Ctrl+Maj+H) ouvre la vue hexadécimale annotée : elle ne montre pas que des octets, elle dit ce que chaque zone représente. Aller à l'adresse (Ctrl+G) vous y emmène directement.

Modifier l'exécutable

Le régime « brut » permet d'écrire des octets et de produire un exécutable modifié. Il est encadré par quatre refus, et chacun protège quelque chose :

refus pourquoi
Le fichier analysé n'est jamais la destination le moteur ne l'ouvre jamais en écriture ; l'interface ne défait pas cette garantie
Écraser un fichier existant est confirmé « cela ne se défait pas »
La signature Authenticode sera supprimée votre accord est demandé avant ; vous pourrez re-signer avec votre propre certificat
Un patch refusé n'écrit rien du tout pas de fichier à moitié écrit

Le studio web ne propose pas les correctifs binaires ni la vue hexadécimale : ce sont deux fonctions propres à l'édition bureau.

9. Ressources et concepteur

Les ressources du binaire

Icônes, curseurs, bitmaps, tables de chaînes, informations de version : tout ce qu'un fichier .res aurait porté. Chaque entrée affiche son type, sa taille et ce qu'on sait en faire, et l'extraction est possible entrée par entrée ou en totalité.

Une ressource que le produit ne sait pas peindre reste listée et s'affiche en octets : elle n'est jamais cachée. Et si des entrées du répertoire n'ont pas pu être suivies, un avertissement le dit — vous savez alors que la liste est plus courte que ce que le binaire porte.

Le concepteur de formulaires

La surface du formulaire est peinte telle que VB6 l'aurait affichée, à partir des propriétés lues dans le binaire, dans le bon ordre de peinture. L'image du formulaire s'exporte (Ctrl+I).

Les propriétés sont en lecture seule : VBReFormer sait lire la surface d'un formulaire, il ne sait pas encore la réécrire dans l'exécutable compilé. Voir le chapitre 13.

10. Exporter le projet

  1. Vérifiez d'abord le panneau Diagnostics. Il dit ce qui n'a pas pu être fait. Le lire avant l'export évite de chercher plus tard pourquoi un élément manque.
  2. Fichier ▸ Exporter le projet VB6. Choisissez un dossier de destination vide.
  3. Lisez les notes d'export. VBReFormer écrit ce qu'il n'a pas pu récupérer, et pourquoi. Certaines informations — les références externes, les options de compilation, le mode de démarrage — ne sont dans aucune structure du binaire : elles n'ont pas été effacées, elles n'y ont jamais été. Elles sont signalées plutôt qu'inventées.
  4. Ouvrez le .vbp dans Visual Basic 6. Les en-têtes que l'IDE exige (VERSION, Attribute VB_Name) sont écrits. Si une référence manque, ajoutez-la par Projet ▸ Références.

Deux refus d'écriture qui vous protègent. Les fichiers VB6 s'écrivent en ANSI 1252. VBReFormer refuse d'écrire si ce jeu de caractères est indisponible sur la machine — écrire dans un autre produirait un fichier faux en silence — ou si un caractère de votre code n'y existe pas, auquel cas il vous dit lequel et son point de code.

11. Les options

réglage ce qu'il fait
Taille d'indentation ne vaut que pour le code reconstruit : le désassemblage, l'IR, le P-code, le bloc concepteur et le .vbp ne sont pas mis en forme par cet éditeur.
Page de codes (concepteur) la page dans laquelle sont lus les légendes et textes du concepteur. Un binaire VB6 ne déclare nulle part la sienne — mesuré sur 236 binaires. Si les libellés d'un formulaire s'affichent en caractères incohérents, c'est ce réglage qu'il faut changer.
Regrouper sous With…End With désactivé par défaut. La sortie est pleinement qualifiée (Frame1.Caption), parce que le compilateur dissout les With et que les rebâtir serait une supposition. Activez-le si vous préférez la lisibilité à la littéralité.
Coloration syntaxique un rôle, une couleur — les rôles viennent du moteur, qui dit ce que chaque fragment est. Notation #RRGGBB ; une palette invalide n'est pas appliquée à moitié.
Langue de l'interface français, anglais, espagnol — le changement est immédiat.

Les réglages de rendu voyagent avec chaque demande d'affichage ; ils ne sont jamais posés comme un état de session. Changer l'indentation ne réanalyse donc rien.

12. Raccourcis

raccourci action
Ctrl+O Ouvrir un binaire VB6
F2 Renommer le symbole sous le curseur
Maj+F12 Analyser les références
Ctrl+Maj+F Rechercher dans le projet
Ctrl+G Aller à l'adresse
Ctrl+Maj+H Voir les octets
Ctrl+Maj+S Liste des symboles
Ctrl+Maj+B Explorateur d'objets
Ctrl+Maj+P Navigateur d'API Win32
Ctrl+Maj+G Graphe de flot de contrôle
Ctrl+Maj+A Graphe des appels
Ctrl+K Bibliothèques citées
Ctrl+L Programmes VB d'un dossier
Ctrl+F2 Poser ou retirer un signet
F8 / Maj+F8 Signet suivant / précédent
Ctrl+Maj+F2 Liste des signets
Alt+← / Alt+→ Navigation arrière / avant
Ctrl+I Exporter l'image d'un formulaire

13. Limites connues

Modifier l'interface d'un exécutable compilé

VBReFormer lit la surface d'un formulaire et toutes ses propriétés — il ne sait pas encore les réécrire dans l'exécutable. Le remplacement d'une ressource embarquée et l'ajout d'une propriété cachée sans recompiler ne sont pas disponibles. Les correctifs binaires — écrire des octets à une adresse — le sont, eux (chapitre 8).

Les ressources .ctx d'UserControl

Aucun fichier .ctx n'est écrit à l'export. Si votre projet contient des UserControl avec des ressources persistées, cette partie est à reconstituer.

Windows antérieur à 10

Utilisez VBReFormer Online : un navigateur suffit, quel que soit le système.

Ce qu'aucun décompilateur ne franchit

Commentaires, noms de variables locales, constantes nommées : ils ne sont pas dans le fichier. Voir le chapitre 5.

14. Questions fréquentes

Une fonction du menu ne répond pas. Pourquoi ? Ouvrez Aide ▸ À propos et regardez la liste des capacités servies. Si la fonction n'y figure pas, ce n'est pas l'interface qui refuse : le moteur ne la sert pas pour ce document. Les messages de l'application le disent d'ailleurs explicitement.

Le code exporté se recompile-t-il tel quel ? Souvent : sur un banc de 149 projets, 121 se recompilent sans retouche. Les autres demandent d'ajouter une référence ou de traiter quelques marqueurs.

Les libellés de mon formulaire sont illisibles. C'est la page de codes. Un binaire VB6 ne déclare nulle part celle de ses textes de concepteur — réglez-la dans les Options (chapitre 11).

Pourquoi mes formulaires sont-ils plus lisibles que mes modules ? Parce que VB6 conserve les noms de contrôles et d'événements pour fonctionner, alors qu'il résout les procédures de modules en simples adresses. Voir le chapitre 5.

Mon exécutable est compressé (packer). Est-ce un problème ? Oui : il doit être décompressé au préalable, sans quoi les structures VB6 ne sont pas visibles dans le fichier.

Peut-on décompiler un .ocx ou une .dll ActiveX ? Oui, et l'inventaire des membres publics y est en général plus riche, puisque COM impose de les nommer.

Mon binaire est-il envoyé quelque part ? La lecture du format, les octets, le désassemblage et les ressources sont traités sur votre poste. La reconstruction du code s'exécute sur nos serveurs — c'est le sens de l'édition Desktop + Cloud.

Est-ce légal ? Cela dépend de votre juridiction et de vos droits sur le binaire. L'usage prévu est la récupération de votre propre code, ou d'un code sur lequel vous détenez les droits ou une autorisation.