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
- Aprite un binario. File ▸ Open a VB6 binary (
Ctrl+O). I formati accettati sono.exe,.dll,.ocxe.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. - 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.
- 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
.bastornano 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
- 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.
- File ▸ Export the VB6 project. Scegliete una cartella di destinazione vuota.
- 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.
- Aprite il
.vbpin 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.
Vedi anche
Manuale di VBReFormer OnlineProva senza acquistare