VBReFormer Desktop – Handbuch
Benutzerhandbuch zu VBReFormer Desktop: installieren, Lizenz aktivieren, die sieben Ansichten lesen, eine Binärdatei analysieren, ein in der IDE wieder ladbares VB6-Projekt exportieren.
Aktualisiert am 20.09.202614 Kapitel
Die auf Ihrem Windows-Rechner installierte Anwendung. Sie öffnet Ihre Visual-Basic-5- und -6- Anwendungen, rekonstruiert deren Quelltext und gibt Ihnen ein Projekt zurück, das die VB6-IDE wieder öffnet – mit der vollständigen Werkbank: Bytes, Ressourcen, Designer, Graphen, Querverweise und Binär-Patches.
Hinweis zur Übersetzung. Die Oberfläche der Desktop-Anwendung gibt es auf Englisch, Französisch und Spanisch. Dieses Handbuch nennt die Menüs und Ansichten mit ihren englischen Bezeichnungen, so wie sie in der Anwendung erscheinen.
1. Installieren
VBReFormer Desktop wird als MSI-Installer ausgeliefert, einer je Oberflächensprache. Das Paket ist eigenständig: Es bringt alles mit, was es braucht; Sie müssen vorher kein Framework installieren.
| Voraussetzung | |
|---|---|
| System | Windows 10 Version 1607 oder neuer, oder Windows 11 |
| Architektur | x64 |
| Framework | keines – das Paket ist eigenständig |
| Verbindung | erforderlich für die Dekompilierung und die Lizenzprüfung |
| Oberflächensprachen | Englisch, Französisch, Spanisch |
Windows XP, Vista, 7 und 8 werden nicht unterstützt. Die Anwendung setzt auf eine Plattform auf, die mindestens Windows 10 verlangt. Ist Ihr Rechner älter, läuft VBReFormer Online in jedem Browser auf jedem System – das ist in diesem Fall der empfohlene Weg.
Wo die Engine arbeitet
Die Anwendung ist lokal; die Rekonstruktion des Codes hingegen läuft auf unseren Servern. Das bedeutet der Name der Edition – Desktop + Cloud. Alles, was aus der Datei gelesen wird (das Format, die Bytes, das Disassembly, die Ressourcen), wird auf Ihrem Rechner berechnet; alles, was rekonstruiert wird, geht über den Dienst.
Der Dialog Help ▸ About nennt Ihnen jederzeit die Version der angebundenen Engine, die des Vertrags und die Liste der bereitgestellten Fähigkeiten (Capabilities served) – nützlich, wenn eine Funktion nicht erscheint: Steht sie nicht in dieser Liste, ist es nicht die Oberfläche, die sie verweigert.
2. Ihre Lizenz aktivieren
Ohne Lizenz öffnet sich die Anwendung und arbeitet: Sie können eine Binärdatei erkunden, das Disassembly vollständig lesen, die Bytes, die Ressourcen und den Designer. Was die Lizenz freischaltet, sind die Rekonstruktion des VB6-Codes und der Projektexport.
Ein Arbeitsplatz zur Zeit
Eine VBReFormer-Lizenz öffnet einen Arbeitsplatz zur Zeit. Nutzen Sie sie bereits anderswo, sagt die Anwendung das deutlich und bietet zwei Auswege an: die Lizenz aus Ihrem Konto auf diesen Rechner übertragen oder einen Arbeitsplatz hinzufügen.
Es ist eine sanfte Absage: Sie haben bezahlt, es fehlt Ihnen nichts. Die Meldung sagt es so, statt einen technischen Fehler zurückzugeben.
Ein auf VBReFormer Online geöffneter Browser zählt ebenfalls als Arbeitsplatz: Web-Studio und Desktop-Anwendung verbrauchen dieselbe Lizenz.
3. Das Fenster
- Öffnen Sie eine Binärdatei. File ▸ Open a VB6 binary (
Strg+O). Akzeptierte Formate sind.exe,.dll,.ocxund.scr. Die Statusleiste zeigt die laufende Analyse, dann den Dateinamen und die Kompilierungsform – nativer Code oder P-Code. - Durchsuchen Sie das Panel PROJECT. Links wird die Binärdatei so dargestellt, wie VB6 sie sah: Formulare, Klassen, Module und deren Prozeduren. Der Baum füllt sich bei Bedarf – das Aufklappen eines Knotens fordert dessen Kinder an; nichts wird im Voraus berechnet, was das Öffnen auch bei einer großen Anwendung schnell hält.
- Wählen Sie eine Prozedur. Die Ansichten dieses Knotens erscheinen rechts. Wird für einen Knoten keine Ansicht bereitgestellt, steht der Grund auf dem Bildschirm statt eines leeren Panels.
Die unteren Panels
| Reiter | wozu er dient |
|---|---|
| Output | das Protokoll der Vorgänge. Es behält die Sprache, in der jede Zeile geschrieben wurde, auch wenn Sie die Oberflächensprache wechseln – ein Protokoll ist eine Aufzeichnung, keine Anzeige. |
| Diagnostics | was die Engine zu tun verweigert hat, und warum. Der Reflex, den man haben sollte, sobald ein Ergebnis überrascht. |
| Analyser | die Querverweise: Aufrufer einer Prozedur, Vorkommen eines Symbols. Das Ergebnis ist anklickbar. |
Die Sichtbarkeit der Mitglieder
Jedes Mitglied des Baums trägt seine Sichtbarkeit so, wie die Binärdatei sie deklariert – (Public),
(Private), (Friend). Das sind VB6-Schlüsselwörter: Sie werden nicht übersetzt. Ein Mitglied, dessen
Sichtbarkeit nicht gelesen werden konnte, trägt keine Kennzeichnung: Wir schreiben nicht, was wir
nicht wissen.
4. Die sieben Ansichten
Sie sind in drei Familien geordnet, und diese Trennung sagt Ihnen, woher das kommt, was Sie lesen. Das ist das Nützlichste, was es zu verstehen gibt.
Familie „Code“ – durch Analyse rekonstruiert
| Ansicht | was sie zeigt | wann man sie ansieht |
|---|---|---|
| Visual Basic 6 | der rekonstruierte, strukturierte Quelltext | standardmäßig – das ist es, was Sie suchen |
| IR | die Zwischendarstellung | um zu sehen, was die Engine verstanden hat |
| Disassembly | die x86-Maschinenbefehle | um zu sehen, was der Prozessor ausführt |
| P-code | die Opcodes der virtuellen VB6-Maschine | nur bei P-Code-Binärdateien |
Diese Liste hinabzugehen heißt, zur Maschine hinaufzusteigen. Im Zweifel bei einer Zeile: Visual Basic 6 sagt die Absicht, Disassembly sagt die Tatsache.
Familie „Project files“ – gelesen, nicht abgeleitet
Designer (.frm), Project (.vbp) und Structure. Nichts hiervon geht durch die Code-Rekonstruktion: Alles wurde aus Tabellen der Binärdatei gelesen, und was nicht gelesen werden konnte, wird ausgeschrieben statt aufgefüllt. Das ist die zuverlässigste Familie des Produkts, und die, die von keiner Schlussfolgerung abhängt.
Familie „Ressourcen“
Siehe Kapitel 9.
5. Was die Kompilierung behält, und was sie wegwirft
Dieses Kapitel erklärt, warum manche Teile Ihres Codes fast unversehrt zurückkommen und andere mit technischen Namen. Die Regel ist einfach:
Was Visual Basic zur Laufzeit braucht, hat es in die Datei geschrieben: VBReFormer findet es wieder. Was es nach der Kompilierung nicht mehr brauchte, hat es weggeworfen – und niemand kann es zurückholen.
Was überlebt: Namen der Formulare, Klassen und Module · Namen der Steuerelemente · Ereignisbehandler · öffentliche Mitglieder der Klassen · alle Oberflächeneigenschaften · Aufrufe der VB-Runtime (635 Funktionen) · Win32-API (15 680 Signaturen) · die Struktur des Codes · die Zeichenketten.
Was nicht in der Datei ist: die Kommentare · die Namen lokaler Variablen · die Namen der
Parameter · die benannten Konstanten, ersetzt durch ihren Wert · die Namen der Prozeduren in
.bas-Modulen · die ursprüngliche Einrückung · Option Explicit und die Enums.
Die praktische Folge. Ihre Formulare kommen sehr lesbar zurück. Ihre
.bas-Module kommen korrekt zurück, aber mit technischen Namen (proc_42C506). Dafür gibt es die Funktion Rename (F2), und sie überträgt den neuen Namen auf alle Aufrufstellen des Projekts – siehe Kapitel 7.
Zwei überprüfbare Beispiele
Die folgenden Auszüge stammen aus SETUP1.EXE, dem mit Visual Basic 6 ausgelieferten Installationsassistenten. Microsoft liefert dessen Quelltext im selben Ordner mit – Sie können den Vergleich also selbst wiederholen.
Eine Prozedur eines .bas-Moduls
Ursprünglicher Quelltext, 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
Von VBReFormer wiedergegeben:
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
Identische Logik, Zeile für Zeile. Right, Trim, Len, RTrim$ sind benannt; die
ByRef-Übergabe ist korrekt abgeleitet. Verloren sind dagegen der Name der Prozedur und der des
Parameters, und die Konstanten erscheinen mit ihrem Wert – der Compiler hat sie ersetzt, nicht
VBReFormer.
Ein Ereignisbehandler
Ursprünglicher Quelltext, BEGIN.FRM:
Private Sub cmdExit_Click()
ExitSetup Me, gintRET_EXIT
End Sub
Von VBReFormer wiedergegeben:
Private Sub cmdExit_Click()
Set var_18 = Me
basSetup1.proc_41CE2D var_18, var_1C
End Sub
Der Name des Formulars, der der Schaltfläche und der des Behandlers sind unversehrt; Me wird
erkannt; das aufgerufene Modul ist benannt, was Ihnen sagt, wohin Sie gehen müssen. Nur die
aufgerufene Prozedur, die in einer .bas lebt, behält ihren Adressnamen.
Die Marker
VBReFormer rät nie. Ein Wert, der nicht festgestellt werden kann, wird markiert statt erfunden – ein plausibler und falscher Wert ist das schlechteste Ergebnis, das ein Decompiler liefern kann.
| Marker | Bedeutung | was zu tun ist |
|---|---|---|
proc_42C506 |
durch ihre Adresse bezeichnete Prozedur | umbenennen (F2) |
var_18, arg_8 |
lokale Variable oder Parameter | ihre Verwendung lesen, dann umbenennen |
vtbl_3C |
nicht aufgelöster Aufruf über eine virtuelle Tabelle | der Object Browser sagt oft, um welche Bibliothek es sich handelt |
? |
nicht festgestellter Wert | an derselben Stelle die Ansicht Disassembly ansehen |
Eine Datei, die ein
?enthält, wird von der VB6-IDE abgelehnt. Der Marker ist da, damit Sie entscheiden, nicht um so neu kompiliert zu werden.
6. Die Analysewerkzeuge
Hier unterscheidet sich die Desktop-Edition am stärksten: Sie bietet eine vollständige Werkbank, wo sich das Web-Studio auf Lesen, Dekompilieren und Exportieren konzentriert.
| Werkzeug | Tastenkürzel | was es Ihnen bringt |
|---|---|---|
| Analyse references | Umschalt+F12 |
Aufrufer einer Prozedur, Vorkommen eines Symbols – anklickbares Ergebnis, und die Abdeckung ist beziffert: Was die Analyse nicht sieht, wird gezählt, nicht verschwiegen |
| Symbol list | Strg+Umschalt+S |
das vollständige Verzeichnis, filterbar nach Art und Geltungsbereich – es unterscheidet gelesene Namen von synthetisierten |
| Call graph | Strg+Umschalt+A |
wer was aufruft, in drei Maßstäben, mit Filtern Aufrufer / Aufgerufene |
| Control-flow graph | Strg+Umschalt+G |
die Form einer Prozedur: Blöcke, Schleifen, Rückkanten, unerreichbare Blöcke |
| Object Browser | Strg+Umschalt+B |
„Wo ist das definiert?“, wenn die Antwort außerhalb der Binärdatei liegt |
| API Browser | Strg+Umschalt+P |
Prototypen, Aliase und Anmerkungen der Win32-Deklarationen |
| Cited libraries | Strg+K |
wovon die Binärdatei abhängt |
| Find VB programs | Strg+L |
die VB-Anwendungen eines Ordners finden |
| Find | Strg+Umschalt+F |
Textsuche in den bereitgestellten Ansichten |
| Lesezeichen | Strg+F2 |
Stellen markieren, zu ihnen zurückkehren (F8 / Umschalt+F8) |
| Navigation zurück / vor | Alt+← Alt+→ |
wie in einem Browser |
Warum die Abdeckung beziffert ist. Der native Aufrufgraph sieht direkte Aufrufe; er sieht weder Aufrufe über virtuelle Tabellen noch Funktionszeiger. Statt eine unvollständige Liste als vollständig auszugeben, zeigt VBReFormer gezählt, was es auslässt. So wissen Sie, wie weit Sie dem Ergebnis trauen können.
7. Umbenennen
Das ist die zentrale Geste der Arbeit an einer Binärdatei: Der Decompiler gibt Ihnen die Logik zurück,
Sie geben ihm die Namen zurück. F2 auf einem Symbol, oder aus der Symbolliste heraus.
Der Dialog zeigt drei Dinge, die Decompiler gewöhnlich verbergen:
- die Herkunft des aktuellen Namens – von Ihnen vergeben, vom Decompiler abgeleitet oder rekonstruiert;
- die Vorschläge des Decompilers, jeder mit seiner Priorität und der Quelle, aus der er stammt;
- den ursprünglichen Namen, zu dem man immer zurückkehren kann.
Das Umbenennen ist global. Benennen Sie eine Prozedur einmal um, und die Aufrufstellen in den anderen Modulen folgen – auch in denen, die Sie noch nicht geöffnet haben.
Ein abgelehntes Umbenennen wird stets mit seinem Grund abgelehnt. Zwei häufige Fälle: Die Engine meldet für dieses Dokument keine Umbenennungsfähigkeit, oder die aktuelle Ansicht trägt nur lexikalische Fragmente – genug, um den Text einzufärben, nicht genug, um eine Entität zu bezeichnen. In beiden Fällen sagt es die Meldung, statt nichts zu tun.
8. Bytes und Binär-Patches
Navigate ▸ Show bytes (Strg+Umschalt+H) öffnet die kommentierte Hex-Ansicht: Sie zeigt nicht
nur Bytes, sie sagt, was jeder Bereich darstellt. Go to address (Strg+G) bringt Sie direkt dorthin.
Die ausführbare Datei verändern
Der „Roh“-Modus erlaubt, Bytes zu schreiben und eine veränderte ausführbare Datei zu erzeugen. Er ist durch vier Absagen eingerahmt, und jede schützt etwas:
| Absage | warum |
|---|---|
| Die analysierte Datei ist nie das Ziel | die Engine öffnet sie nie zum Schreiben; die Oberfläche hebt diese Garantie nicht auf |
| Das Überschreiben einer vorhandenen Datei wird bestätigt | „das lässt sich nicht rückgängig machen“ |
| Die Authenticode-Signatur wird entfernt | Ihre Zustimmung wird vorher erfragt; Sie können mit Ihrem eigenen Zertifikat neu signieren |
| Ein abgelehnter Patch schreibt gar nichts | keine halb geschriebene Datei |
Das Web-Studio bietet Binär-Patches und Hex-Ansicht nicht an: Es sind zwei Funktionen, die der Desktop-Edition vorbehalten sind.
9. Ressourcen und Designer
Die Ressourcen der Binärdatei
Symbole, Cursor, Bitmaps, Zeichenkettentabellen, Versionsinformationen: alles, was eine .res-Datei
getragen hätte. Jeder Eintrag zeigt seinen Typ, seine Größe und was man damit anfangen kann, und das
Extrahieren ist Eintrag für Eintrag oder insgesamt möglich.
Eine Ressource, die das Produkt nicht zu zeichnen weiß, bleibt aufgeführt und wird als Bytes angezeigt: Sie wird nie verborgen. Und konnten Einträge des Verzeichnisses nicht verfolgt werden, sagt das eine Warnung – Sie wissen dann, dass die Liste kürzer ist als das, was die Binärdatei trägt.
Der Formulardesigner
Die Oberfläche des Formulars wird so gezeichnet, wie VB6 sie angezeigt hätte, aus den in der
Binärdatei gelesenen Eigenschaften, in der richtigen Zeichenreihenfolge. Das Bild des Formulars lässt
sich exportieren (Strg+I).
Die Eigenschaften sind schreibgeschützt: VBReFormer kann die Oberfläche eines Formulars lesen, es kann sie noch nicht in die kompilierte Datei zurückschreiben. Siehe Kapitel 13.
10. Das Projekt exportieren
- Prüfen Sie zuerst das Panel Diagnostics. Es sagt, was nicht getan werden konnte. Es vor dem Export zu lesen erspart, später zu suchen, warum ein Element fehlt.
- File ▸ Export the VB6 project. Wählen Sie einen leeren Zielordner.
- Lesen Sie die Exportnotizen. VBReFormer schreibt, was es nicht zurückholen konnte, und warum. Manche Informationen – die externen Verweise, die Kompilierungsoptionen, der Startmodus – stehen in keiner Struktur der Binärdatei: Sie wurden nicht gelöscht, sie waren nie dort. Sie werden gemeldet statt erfunden.
- Öffnen Sie die
.vbpin Visual Basic 6. Die Kopfzeilen, die die IDE verlangt (VERSION,Attribute VB_Name), sind geschrieben. Fehlt ein Verweis, fügen Sie ihn über Projekt ▸ Verweise hinzu.
Zwei Schreibverweigerungen, die Sie schützen. VB6-Dateien werden in ANSI 1252 geschrieben. VBReFormer verweigert das Schreiben, wenn dieser Zeichensatz auf dem Rechner nicht verfügbar ist – in einem anderen zu schreiben würde stillschweigend eine falsche Datei erzeugen – oder wenn ein Zeichen Ihres Codes darin nicht existiert; dann nennt es Ihnen welches und dessen Codepunkt.
11. Die Optionen
| Einstellung | was sie bewirkt |
|---|---|
| Indentation width | gilt nur für den rekonstruierten Code: Disassembly, IR, P-Code, Designer-Block und .vbp werden von diesem Editor nicht formatiert. |
| Code page (designer) | die Codepage, in der die Beschriftungen und Texte des Designers gelesen werden. Eine VB6-Binärdatei deklariert ihre eigene nirgends – gemessen an 236 Binärdateien. Erscheinen die Beschriftungen eines Formulars in unstimmigen Zeichen, ist dies die Einstellung, die zu ändern ist. |
Group under With…End With |
standardmäßig aus. Die Ausgabe ist vollständig qualifiziert (Frame1.Caption), weil der Compiler die With-Blöcke auflöst und sie wieder aufzubauen eine Vermutung wäre. Schalten Sie es ein, wenn Sie Lesbarkeit der Wörtlichkeit vorziehen. |
| Syntax colouring | eine Rolle, eine Farbe – die Rollen kommen von der Engine, die sagt, was jedes Fragment ist. Notation #RRGGBB; eine ungültige Palette wird nicht halb angewendet. |
| Interface language | Englisch, Französisch, Spanisch – der Wechsel ist sofort wirksam. |
Die Darstellungseinstellungen reisen mit jeder Anzeigeanfrage mit; sie werden nie als Sitzungszustand gesetzt. Die Einrückung zu ändern analysiert daher nichts neu.
12. Tastenkürzel
| Tastenkürzel | Aktion |
|---|---|
Strg+O |
Eine VB6-Binärdatei öffnen |
F2 |
Das Symbol unter dem Cursor umbenennen |
Umschalt+F12 |
Verweise analysieren |
Strg+Umschalt+F |
Im Projekt suchen |
Strg+G |
Zu einer Adresse gehen |
Strg+Umschalt+H |
Bytes anzeigen |
Strg+Umschalt+S |
Symbolliste |
Strg+Umschalt+B |
Object Browser |
Strg+Umschalt+P |
API Browser |
Strg+Umschalt+G |
Kontrollflussgraph |
Strg+Umschalt+A |
Aufrufgraph |
Strg+K |
Zitierte Bibliotheken |
Strg+L |
VB-Programme eines Ordners |
Strg+F2 |
Lesezeichen setzen oder entfernen |
F8 / Umschalt+F8 |
Nächstes / vorheriges Lesezeichen |
Strg+Umschalt+F2 |
Lesezeichenliste |
Alt+← / Alt+→ |
Navigation zurück / vor |
Strg+I |
Das Bild eines Formulars exportieren |
13. Bekannte Grenzen
Die Oberfläche einer kompilierten Anwendung verändern
VBReFormer liest die Oberfläche eines Formulars und alle seine Eigenschaften – es kann sie noch nicht in die ausführbare Datei zurückschreiben. Das Ersetzen einer eingebetteten Ressource und das Hinzufügen einer verborgenen Eigenschaft ohne Neukompilierung sind nicht verfügbar. Binär-Patches – Bytes an einer Adresse schreiben – sind es dagegen (Kapitel 8).
Die .ctx-Ressourcen von UserControls
Beim Export wird keine .ctx-Datei geschrieben. Enthält Ihr Projekt UserControls mit persistierten
Ressourcen, ist dieser Teil neu zu erstellen.
Windows vor Version 10
Verwenden Sie VBReFormer Online: Ein Browser genügt, welches System auch immer.
Was kein Decompiler überwindet
Kommentare, Namen lokaler Variablen, benannte Konstanten: Sie stehen nicht in der Datei. Siehe Kapitel 5.
14. Häufige Fragen
Eine Menüfunktion reagiert nicht. Warum? Öffnen Sie Help ▸ About und sehen Sie in die Liste der bereitgestellten Fähigkeiten. Steht die Funktion nicht darin, ist es nicht die Oberfläche, die verweigert: Die Engine stellt sie für dieses Dokument nicht bereit. Die Meldungen der Anwendung sagen das übrigens ausdrücklich.
Lässt sich der exportierte Code unverändert neu kompilieren? Oft: Von 149 Projekten eines Testbetts kompilieren 121 unverändert neu. Die anderen verlangen, einen Verweis hinzuzufügen oder einige Marker zu behandeln.
Die Beschriftungen meines Formulars sind unleserlich. Das ist die Codepage. Eine VB6-Binärdatei deklariert nirgends die ihrer Designer-Texte – stellen Sie sie in den Optionen ein (Kapitel 11).
Warum sind meine Formulare lesbarer als meine Module? Weil VB6 die Namen der Steuerelemente und Ereignisse behält, um zu funktionieren, während es Modulprozeduren zu bloßen Adressen auflöst. Siehe Kapitel 5.
Meine ausführbare Datei ist gepackt (Packer). Ist das ein Problem? Ja: Sie muss vorher entpackt werden, sonst sind die VB6-Strukturen in der Datei nicht sichtbar.
Kann man eine .ocx oder eine ActiveX-.dll dekompilieren?
Ja, und das Verzeichnis der öffentlichen Mitglieder ist dort im Allgemeinen reicher, da COM verlangt,
sie zu benennen.
Wird meine Binärdatei irgendwohin gesendet? Das Lesen des Formats, die Bytes, das Disassembly und die Ressourcen werden auf Ihrem Rechner verarbeitet. Die Rekonstruktion des Codes läuft auf unseren Servern – das ist der Sinn der Edition Desktop + Cloud.
Ist das legal? Das hängt von Ihrer Rechtsordnung und Ihren Rechten an der Binärdatei ab. Der vorgesehene Gebrauch ist die Wiederherstellung Ihres eigenen Codes oder eines Codes, an dem Sie die Rechte oder eine Erlaubnis halten.
Siehe auch
VBReFormer Online – HandbuchOhne Kauf ausprobieren