Decompiler-VB.Net
IT
Accedi
VBReFormer Gen2 Motore riscritto da zero, P-code completo e lo studio online in beta pubblica. Leggi l'annuncio
Documentazione
VBReFormer Desktop

Manuale di VBReFormer Desktop

Manuale d'uso di VBReFormer Desktop: installare, attivare la licenza, leggere le sette viste, analizzare un binario, esportare un progetto VB6 ricaricabile nell'IDE.

Aggiornato il 20/09/202614 capitoli

L'applicazione installata sulla vostra macchina Windows. Apre i vostri eseguibili Visual Basic 5 e 6, ne ricostruisce il codice sorgente e vi restituisce un progetto che l'IDE VB6 riapre — con l'attrezzatura completa: byte, risorse, designer, grafi, riferimenti incrociati e patch binarie.

Nota sulla traduzione. L'interfaccia dell'applicazione desktop esiste in inglese, francese e spagnolo. Questo manuale cita i menu e le viste con i loro nomi inglesi, così come compaiono nell'applicazione.

1. Installare

VBReFormer Desktop è distribuito come installer MSI, uno per lingua d'interfaccia. Il pacchetto è autonomo: contiene tutto ciò di cui ha bisogno, non c'è alcun framework da installare prima.

requisito
Sistema Windows 10 versione 1607 o successiva, oppure Windows 11
Architettura x64
Framework nessuno — il pacchetto è autonomo
Connessione necessaria per la decompilazione e la convalida della licenza
Lingue dell'interfaccia inglese, francese, spagnolo

Windows XP, Vista, 7 e 8 non sono supportati. L'applicazione si basa su una piattaforma che richiede almeno Windows 10. Se la vostra macchina è più vecchia, VBReFormer Online funziona in qualsiasi browser, su qualsiasi sistema — in quel caso è la via consigliata.

Dove lavora il motore

L'applicazione è locale; la ricostruzione del codice, invece, viene eseguita sui nostri server. È ciò che significa il nome dell'edizione — Desktop + Cloud. Tutto ciò che si legge nel file (il formato, i byte, il disassemblato, le risorse) è calcolato sulla vostra macchina; tutto ciò che si ricostruisce passa dal servizio.

La finestra Help ▸ About vi dice in ogni momento la versione del motore collegato, quella del contratto e l'elenco delle capacità servite (Capabilities served) — utile quando una funzione non compare: se non è in quell'elenco, non è l'interfaccia a rifiutarla.

2. Attivare la licenza

Senza licenza, l'applicazione si apre e lavora: potete esplorare un binario, leggere per intero il disassemblato, i byte, le risorse e il designer. Ciò che la licenza apre è la ricostruzione del codice VB6 e l'esportazione del progetto.

Una postazione alla volta

Una licenza VBReFormer apre una postazione di lavoro alla volta. Se la state già usando altrove, l'applicazione ve lo dice chiaramente e vi propone due uscite: trasferire la licenza su questa macchina dal vostro account, oppure aggiungere una postazione.

È un rifiuto morbido: avete pagato, non vi manca nulla. Il messaggio lo dice così invece di restituirvi un errore tecnico.

Anche un browser aperto su VBReFormer Online conta come una postazione: lo studio web e l'applicazione desktop consumano la stessa licenza.

3. La finestra

  1. Aprite un binario. File ▸ Open a VB6 binary (Ctrl+O). I formati accettati sono .exe, .dll, .ocx e .scr. La barra di stato mostra l'analisi in corso, poi il nome del file e la sua forma di compilazione — codice nativo o P-code.
  2. Scorrete il pannello PROJECT. A sinistra, il binario è presentato come lo vedeva VB6: form, classi, moduli e le loro procedure. L'albero si popola su richiesta — espandere un nodo chiede i suoi figli; nulla è calcolato in anticipo, il che mantiene rapida l'apertura anche con un grosso eseguibile.
  3. Selezionate una procedura. Le viste di quel nodo compaiono a destra. Se nessuna vista è servita per un nodo, il motivo è scritto sullo schermo invece di un pannello vuoto.

I pannelli in basso

scheda a che cosa serve
Output il registro delle operazioni. Conserva la lingua in cui ogni riga è stata scritta, anche se cambiate la lingua dell'interfaccia — un registro è una registrazione, non una visualizzazione.
Diagnostics ciò che il motore si è rifiutato di fare, e perché. Il riflesso da avere non appena un risultato sorprende.
Analyser i riferimenti incrociati: chiamanti di una procedura, occorrenze di un simbolo. Il risultato è cliccabile.

La visibilità dei membri

Ogni membro dell'albero porta la sua visibilità così come il binario la dichiara — (Public), (Private), (Friend). Sono parole chiave di VB6: non vengono tradotte. Un membro la cui visibilità non è stata letta non porta alcun segno: non si scrive ciò che non si sa.

4. Le sette viste

Sono ordinate in tre famiglie, e questa separazione vi dice da dove viene ciò che leggete. È la cosa più utile da capire.

Famiglia «Code» — ricostruita per analisi

vista che cosa mostra quando consultarla
Visual Basic 6 il sorgente ricostruito, strutturato per impostazione predefinita — è ciò che cercate
IR la rappresentazione intermedia per vedere che cosa il motore ha capito
Disassembly le istruzioni macchina x86 per vedere che cosa il processore esegue
P-code gli opcode della macchina virtuale VB6 solo binari P-code

Scendere lungo questo elenco è risalire verso la macchina. In caso di dubbio su una riga: Visual Basic 6 dice l'intenzione, Disassembly dice il fatto.

Famiglia «Project files» — letta, non dedotta

Designer (.frm), Project (.vbp) e Structure. Nulla qui passa dalla ricostruzione del codice: tutto è stato letto nelle tabelle del binario, e ciò che non si è potuto leggere è scritto per esteso invece di essere colmato. È la famiglia più affidabile del prodotto, e quella che non dipende da alcuna inferenza.

Famiglia «Risorse»

Vedere il capitolo 9.

5. Che cosa la compilazione conserva, e che cosa getta via

Questo capitolo spiega perché alcune parti del vostro codice tornano quasi intatte e altre con nomi tecnici. La regola è semplice:

Ciò di cui Visual Basic ha bisogno durante l'esecuzione, lo ha scritto nel file: VBReFormer lo ritrova. Ciò di cui non aveva più bisogno dopo la compilazione, lo ha gettato via — e nessuno può ritrovarlo.

Ciò che sopravvive: nomi di form, classi e moduli · nomi dei controlli · gestori di eventi · membri pubblici delle classi · tutte le proprietà d'interfaccia · chiamate al runtime VB (635 funzioni) · API Win32 (15 680 firme) · la struttura del codice · le stringhe.

Ciò che non è nel file: i commenti · i nomi delle variabili locali · i nomi dei parametri · le costanti con nome, sostituite dal loro valore · i nomi delle procedure dei moduli .bas · l'indentazione originale · Option Explicit e gli Enum.

La conseguenza pratica. I vostri form tornano molto leggibili. I vostri moduli .bas tornano corretti, ma con nomi tecnici (proc_42C506). La funzione Rename (F2) esiste per questo, e propaga il nuovo nome a tutti i punti di chiamata del progetto — vedere il capitolo 7.

Due esempi verificabili

Gli estratti seguenti provengono da SETUP1.EXE, la procedura guidata d'installazione fornita con Visual Basic 6. Microsoft ne distribuisce il codice sorgente nella stessa cartella — potete quindi rifare il confronto da soli.

Una procedura di modulo .bas

Sorgente originale, 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

Reso da 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

Logica identica, riga per riga. Right, Trim, Len, RTrim$ hanno il loro nome; il passaggio ByRef è dedotto correttamente. Invece il nome della procedura e quello del parametro sono persi, e le costanti compaiono con il loro valore — è il compilatore che le ha sostituite, non VBReFormer.

Un gestore di evento

Sorgente originale, BEGIN.FRM:

Private Sub cmdExit_Click()
    ExitSetup Me, gintRET_EXIT
End Sub

Reso da VBReFormer:

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

Il nome del form, quello del pulsante e quello del gestore sono intatti; Me è riconosciuto; il modulo chiamato ha il suo nome, il che vi dice dove andare. Solo la procedura chiamata, che vive in un .bas, conserva il suo nome d'indirizzo.

I marcatori

VBReFormer non indovina mai. Un valore che non può essere stabilito viene marcato invece che inventato — un valore verosimile e falso è il peggior risultato che un decompilatore possa produrre.

marcatore significato che cosa fare
proc_42C506 procedura designata dal suo indirizzo rinominarla (F2)
var_18, arg_8 variabile locale o parametro leggerne l'uso, poi rinominare
vtbl_3C chiamata tramite tabella virtuale non risolta l'Object Browser dice spesso di quale libreria si tratta
? valore non stabilito consultare la vista Disassembly nello stesso punto

Un file che contiene un ? sarà rifiutato dall'IDE VB6. Il marcatore è lì perché decidiate voi, non per essere ricompilato così com'è.

6. Gli strumenti di analisi

È qui che l'edizione desktop si distingue di più: offre un banco di lavoro completo, là dove lo studio web si concentra su leggere, decompilare ed esportare.

strumento scorciatoia che cosa vi dà
Analyse references Maiusc+F12 chiamanti di una procedura, occorrenze di un simbolo — risultato cliccabile, e la copertura è quantificata: ciò che l'analisi non vede è contato, non taciuto
Symbol list Ctrl+Maiusc+S l'inventario completo, filtrabile per natura e per ambito — distingue i nomi letti dai nomi sintetizzati
Call graph Ctrl+Maiusc+A chi chiama che cosa, a tre scale, con filtri chiamanti / chiamati
Control-flow graph Ctrl+Maiusc+G la forma di una procedura: blocchi, cicli, archi all'indietro, blocchi irraggiungibili
Object Browser Ctrl+Maiusc+B «dov'è definito questo?» quando la risposta è fuori dal binario
API Browser Ctrl+Maiusc+P prototipi, alias e note delle dichiarazioni Win32
Cited libraries Ctrl+K da che cosa dipende il binario
Find VB programs Ctrl+L ritrovare gli eseguibili VB di una cartella
Find Ctrl+Maiusc+F ricerca di testo nelle viste servite
Segnalibri Ctrl+F2 segnare dei punti, tornarci (F8 / Maiusc+F8)
Navigazione indietro / avanti Alt+← Alt+→ come in un browser

Perché la copertura è quantificata. Il grafo delle chiamate nativo vede le chiamate dirette; non vede le chiamate tramite tabella virtuale né i puntatori a funzione. Invece di presentare un elenco parziale come completo, VBReFormer mostra ciò che omette, contato. Sapete così fino a che punto fidarvi del risultato.

7. Rinominare

È il gesto centrale del lavoro su un binario: il decompilatore vi restituisce la logica, voi gli restituite i nomi. F2 su un simbolo, oppure dall'elenco dei simboli.

La finestra mostra tre cose che i decompilatori di solito nascondono:

  • l'origine del nome corrente — dato da voi, inferito dal decompilatore, o ricostruito;
  • le proposte del decompilatore, ciascuna con la sua priorità e la fonte da cui proviene;
  • il nome originale, al quale si può sempre tornare.

La rinomina è globale. Rinominate una procedura una volta, e i punti di chiamata degli altri moduli seguono — compresi quelli che non avete ancora aperto.

Una rinomina rifiutata lo è sempre con il suo motivo. Due casi frequenti: il motore non annuncia la capacità di rinominare su questo documento, oppure la vista corrente porta solo frammenti lessicali — abbastanza per colorare il testo, non per designare un'entità. In entrambi i casi il messaggio lo dice, invece di non fare nulla.

8. Byte e patch binarie

Navigate ▸ Show bytes (Ctrl+Maiusc+H) apre la vista esadecimale annotata: non mostra solo byte, dice che cosa rappresenta ogni zona. Go to address (Ctrl+G) vi ci porta direttamente.

Modificare l'eseguibile

La modalità «grezza» permette di scrivere byte e produrre un eseguibile modificato. È inquadrata da quattro rifiuti, e ciascuno protegge qualcosa:

rifiuto perché
Il file analizzato non è mai la destinazione il motore non lo apre mai in scrittura; l'interfaccia non annulla questa garanzia
Sovrascrivere un file esistente viene confermato «questo non si annulla»
La firma Authenticode verrà rimossa il vostro consenso è chiesto prima; potrete rifirmare con il vostro certificato
Una patch rifiutata non scrive proprio nulla nessun file scritto a metà

Lo studio web non offre le patch binarie né la vista esadecimale: sono due funzioni proprie dell'edizione desktop.

9. Risorse e designer

Le risorse del binario

Icone, cursori, bitmap, tabelle di stringhe, informazioni di versione: tutto ciò che un file .res avrebbe contenuto. Ogni voce mostra il suo tipo, la sua dimensione e ciò che se ne sa fare, e l'estrazione è possibile voce per voce o nella sua totalità.

Una risorsa che il prodotto non sa disegnare resta elencata e viene mostrata in byte: non è mai nascosta. E se alcune voci della directory non hanno potuto essere seguite, un avviso lo dice — sapete allora che l'elenco è più corto di ciò che il binario contiene.

Il designer dei form

La superficie del form è disegnata così come VB6 l'avrebbe mostrata, a partire dalle proprietà lette nel binario, nel giusto ordine di disegno. L'immagine del form si esporta (Ctrl+I).

Le proprietà sono in sola lettura: VBReFormer sa leggere la superficie di un form, non sa ancora riscriverla nell'eseguibile compilato. Vedere il capitolo 13.

10. Esportare il progetto

  1. Controllate prima il pannello Diagnostics. Dice che cosa non si è potuto fare. Leggerlo prima dell'esportazione evita di cercare in seguito perché un elemento manca.
  2. File ▸ Export the VB6 project. Scegliete una cartella di destinazione vuota.
  3. Leggete le note di esportazione. VBReFormer scrive ciò che non ha potuto recuperare, e perché. Alcune informazioni — i riferimenti esterni, le opzioni di compilazione, la modalità di avvio — non sono in alcuna struttura del binario: non sono state cancellate, non ci sono mai state. Vengono segnalate invece che inventate.
  4. Aprite il .vbp in Visual Basic 6. Le intestazioni che l'IDE richiede (VERSION, Attribute VB_Name) sono scritte. Se manca un riferimento, aggiungetelo da Progetto ▸ Riferimenti.

Due rifiuti di scrittura che vi proteggono. I file VB6 si scrivono in ANSI 1252. VBReFormer si rifiuta di scrivere se quel set di caratteri non è disponibile sulla macchina — scrivere in un altro produrrebbe un file sbagliato in silenzio — oppure se un carattere del vostro codice non vi esiste, nel qual caso vi dice quale e il suo punto di codice.

11. Le opzioni

impostazione che cosa fa
Indentation width vale solo per il codice ricostruito: il disassemblato, l'IR, il P-code, il blocco del designer e il .vbp non sono formattati da questo editor.
Code page (designer) la pagina in cui vengono lette le didascalie e i testi del designer. Un binario VB6 non dichiara da nessuna parte la propria — misurato su 236 binari. Se le etichette di un form compaiono con caratteri incoerenti, è questa l'impostazione da cambiare.
Group under With…End With disattivata per impostazione predefinita. L'output è pienamente qualificato (Frame1.Caption), perché il compilatore dissolve i With e ricostruirli sarebbe una supposizione. Attivatela se preferite la leggibilità alla letteralità.
Syntax colouring un ruolo, un colore — i ruoli vengono dal motore, che dice che cos'è ogni frammento. Notazione #RRGGBB; una tavolozza non valida non viene applicata a metà.
Interface language inglese, francese, spagnolo — il cambio è immediato.

Le impostazioni di resa viaggiano con ogni richiesta di visualizzazione; non sono mai poste come stato di sessione. Cambiare l'indentazione non rianalizza quindi nulla.

12. Scorciatoie

scorciatoia azione
Ctrl+O Aprire un binario VB6
F2 Rinominare il simbolo sotto il cursore
Maiusc+F12 Analizzare i riferimenti
Ctrl+Maiusc+F Cercare nel progetto
Ctrl+G Andare all'indirizzo
Ctrl+Maiusc+H Vedere i byte
Ctrl+Maiusc+S Elenco dei simboli
Ctrl+Maiusc+B Object Browser
Ctrl+Maiusc+P API Browser
Ctrl+Maiusc+G Grafo del flusso di controllo
Ctrl+Maiusc+A Grafo delle chiamate
Ctrl+K Librerie citate
Ctrl+L Programmi VB di una cartella
Ctrl+F2 Mettere o togliere un segnalibro
F8 / Maiusc+F8 Segnalibro successivo / precedente
Ctrl+Maiusc+F2 Elenco dei segnalibri
Alt+← / Alt+→ Navigazione indietro / avanti
Ctrl+I Esportare l'immagine di un form

13. Limiti noti

Modificare l'interfaccia di un eseguibile compilato

VBReFormer legge la superficie di un form e tutte le sue proprietà — non sa ancora riscriverle nell'eseguibile. La sostituzione di una risorsa incorporata e l'aggiunta di una proprietà nascosta senza ricompilare non sono disponibili. Le patch binarie — scrivere byte a un indirizzo — invece sì (capitolo 8).

Le risorse .ctx degli UserControl

Nessun file .ctx viene scritto all'esportazione. Se il vostro progetto contiene UserControl con risorse persistite, quella parte è da ricostituire.

Windows precedente a 10

Usate VBReFormer Online: basta un browser, qualunque sia il sistema.

Ciò che nessun decompilatore supera

Commenti, nomi delle variabili locali, costanti con nome: non sono nel file. Vedere il capitolo 5.

14. Domande frequenti

Una funzione del menu non risponde. Perché? Aprite Help ▸ About e guardate l'elenco delle capacità servite. Se la funzione non vi compare, non è l'interfaccia a rifiutare: il motore non la serve per questo documento. I messaggi dell'applicazione, del resto, lo dicono esplicitamente.

Il codice esportato si ricompila così com'è? Spesso: su un banco di 149 progetti, 121 si ricompilano senza ritocchi. Gli altri richiedono di aggiungere un riferimento o di trattare alcuni marcatori.

Le etichette del mio form sono illeggibili. È la code page. Un binario VB6 non dichiara da nessuna parte quella dei suoi testi del designer — impostatela nelle Opzioni (capitolo 11).

Perché i miei form sono più leggibili dei miei moduli? Perché VB6 conserva i nomi dei controlli e degli eventi per funzionare, mentre risolve le procedure dei moduli in semplici indirizzi. Vedere il capitolo 5.

Il mio eseguibile è compresso (packer). È un problema? Sì: deve essere decompresso prima, altrimenti le strutture VB6 non sono visibili nel file.

Si può decompilare un .ocx o una .dll ActiveX? Sì, e l'inventario dei membri pubblici è in genere più ricco, poiché COM impone di dar loro un nome.

Il mio binario viene inviato da qualche parte? La lettura del formato, i byte, il disassemblato e le risorse sono elaborati sulla vostra macchina. La ricostruzione del codice viene eseguita sui nostri server — è il senso dell'edizione Desktop + Cloud.

È legale? Dipende dalla vostra giurisdizione e dai vostri diritti sul binario. L'uso previsto è il recupero del vostro codice, o di un codice sul quale detenete i diritti o un'autorizzazione.