Programmazione.it v6.4
Ciao, per farti riconoscere devi fare il login. Non ti sei ancora iscritto? Che aspetti, registrati adesso!
Info Pubblicità Collabora Autori Sottoscrizioni Preferiti Bozze Scheda personale Privacy Archivio Libri Corsi per principianti Forum
Greenpeace
VB Decompiler, il reverse engineering del Visual Basic P-Code
Scritto da Alessandro Carichini il 16-07-2007 ore 09:46
Intel Parallel Studio XE
Il VB Decompiler, prodotto dalla GPcH Soft, è un decompilatore di programmi EXE, DLL o OCX scritti in Visual Basic 5/6 e compilati nella modalità P-Code (Pseudocode o Packed Code). Quest’ultimo è il codice interpretato al momento dell'esecuzione da una virtual machine contenuta nella libreria di runtime, la famigerata MSVBVM60.DLL, o MSVBVM50.DLL per la versione 5. Per questo il reverse engineering del P-Code può dare molte soddisfazioni riuscendo ad estrapolare parecchie informazioni sulla struttura originale del codice sorgente.

Questo però non toglie merito al VB Decompiler, uno strumento semplice da usare, ma potente nel risultato finale. Infatti, sebbene esso non possa recuperare i nomi originali delle funzioni e delle variabili, riesce comunque ad elencare dettagliatamente tutte le componenti del progetto (vbp, frm, frx, bas e ctl). Ciò che non viene completamente decompilato in sorgente Visual Basic viene disassemblato in una sorta di pseudoassembler e Basic. La capacità di analizzare il P-Code si manifesta attraverso la ricerca di tutte le chiamate alle funzioni API e l'indice di tutte le stringhe contenute al suo interno.

Sono previste due versioni di VB Decompiler, una Lite completamente gratuita e l'altra Professional dal costo di 99 dollari. Le differenze a favore della versione commerciale riguardano principalmente la possibilità di decompilare completamente il P-Code importato — con o senza stack parsing — e la possibilità di “offuscare” il codice dei programmi VB5/6.

Per il resto anche con la versione free è possibile estrapolare dall'eseguibile le form (frm e frx) e i file oggetto dei controlli utente (ctl), salvare i dati decompilati in un singolo file di database (vdd) e richiamarli dal VB Decompiler stesso. Quest'ultima funzionalità si rivela molto comoda per consultare del codice e ricercare funzioni senza per questo dover caricare o installare l'IDE di Microsoft.

L'unico vero problema riguarda il fatto che i file decompilati molto spesso eccedono i 64 KB massimi supportati dal Visual Basic per ogni file che deve caricare. Per ovviare all'inevitabile “out of memory”, è necessario dividere in più parti lo stesso modulo. In realtà, per applicazioni molto complesse è talmente difficile poter ricompilare l'intero progetto senza dover mettere mano al codice che questo diventa un problema secondario.

Chiaramente tutto il discorso del reverse engineering è perfettamente legittimo qualora non si violi alcun tipo di copyright. Un'ultima considerazione riguarda il fatto che il programma riconosce pure gli eseguibili in Delphi, ma per la decompilazione vera e propria rimanda al De-Decompiler di prossima uscita, probabilmente in ottobre.
Precedente: Script per servizi Windows
Successiva: Linus Torvalds ancora contro la GPLv3
Intervento di qbprog del 16-07-2007 ore 13:27
Cavaliere
Cavaliere

(138 interventi)
Iscritto il 20-09-2004
mmmm non so quanti programmi VB6 in giro vengano compilati in PCODE. E' comunque utilissimo per i form e le risorse!
Intervento di Alessandro Carichini a.k.a. alexsoft del 16-07-2007 ore 16:11, Rimini (RN)
Cavaliere
Cavaliere

(144 interventi)
Iscritto il 18-10-2004
Citazione:
mmmm non so quanti programmi VB6 in giro vengano compilati in PCODE. E' comunque utilissimo per i form e le risorse!

In verità anche nella modalità native code riesce ad estrapolare parecchie informazioni è solo che il manuale parla espressamente di P-Code, ma in prova ho visto che alcuni progetti compilati "nativi" venivano decompilati ugualmente, magari con più righe in simil Assembler piuttosto che Basic...
Copyright Programmazione.it™ 1999-2013. Alcuni diritti riservati. Testata giornalistica iscritta col n. 569 presso il Tribunale di Milano in data 14/10/2002. Pagina generata in 0.303 secondi.