Proteggere i progetti di VBA

L'insostenibile leggerezza delle password di VBA

Scritto da Roberto Rossi il 10-2019

L'ambiente di sviluppo VBA è diffuso in moltissimi software. Lo troviamo in Microsoft Office, lo troviamo in AutoCAD, lo troviamo in molti altri software, e soprattutto in molti altri CAD.

Con VBA è possibile realizzare applicazioni per estendere e potenziare software più complessi.

Spesso, quando si creano applicazioni VBA, si ha la necessità di rendere inaccessibile il proprio codice sorgente, operazione che può essere fatta dotando i propri progetti di una password. L'ambiente VBA permette infatti di impostare una parola chiave di accesso ai sorgenti.

Questa password è sia un problema che un vantaggio. Un problema perchè è come se non ci fosse, un vantaggio perchè se la dimentichi... non ci sono problemi.

In questo articolo vedremo come recuperare la password dei nostri moduli VBA, nel caso in cui ce la fossimo dimenticata.

Buona lettura.

Con quali software?

Ora, tutto ciò che scriverò in questo articolo è applicabile a tutte le versioni di VBA integrate in tantissimi software.

Facciamo qualche esempio. Le procedure saranno applicabili a :

Ed è indifferente che si tratti di un ambiente a 32 o 64bit.

Tutto ciò che racconterò non è una novità, infatti sono anni che in rete si trovano spiegate le medesime cose. Solo che, nella maggior parte dei casi, il software che si prende in considerazione è Excel. Vedere per credere :

http://superuser.com/questions/807926/how-to-bypass-the-vba-project-password-from-excel

oppure

http://www.dragmar.com/public/?p=140

Però, se si può recuperare la password di un modulo VBA per Excel, lo si può fare anche con i moduli VBA degli altri software.

Vediamo come.

VBA e la protezione con password

Prima di tutto, partiamo da un progetto VBA.

In questo esempio ho creato un piccolo progetto contenente una form, un modulo standard per del codice e un modulo di classe. Eccolo qui :

Progetto vba

Bene. Facciamo finta che quello che vediamo siamo il nostro progetto, completo e funzionante. A questo punto impostiamo la password, in modo che chiunque altro possa utilizzare il nostro lavoro, ma non possa accedere ai sorgenti.

Per farlo, prima di tutto, andiamo nel menu Tools e clicchiamo sulle Properties del nostro progetto:

Strumenti VBA

Nella maschera delle Properties, nella scheda Protection, attiviamo e impostiamo la password di accesso.

Proprietà VBA

Fatto. Salviamo il nostro progetto, chiudiamo il software che stiamo utilizzando, riapriamolo, e ricarichiamo il nostro applicativo VBA. Quando tenteremo di accedere nuovamente ai sorgenti, per via dell'impostazione fatta in precedenza, ci verrà richiesto di inserire la password che abbiamo impostato:

Password VBA

Ovviamente, inserendo la giusta parola chiave sarà possibile accedere al nostro sorgente, inserendo una parola chiave errata, VBA ci negerà l'accesso.

E se ci dimentichiamo la password?

Supponiamo che dopo anni, riprendiamo un vecchio progetto VBA, magari perchè un cliente ha bisogno qualcosa di simile e noi sappiamo che già lo avevamo fatto per qualcun'altro.

Bene. Supponiamo che il progetto sia proprio quello che abbiamo visto poco sopra. Solo che c'è un problema. Ci siamo dimenticati la password, e ora non possiamo più accedere per effettuare le modifiche che servono.

Come fare? Vediamolo insieme...

Prima di tutto ci serve un editor esadecimale. Ce ne sono tantissimi, sia gratuiti che commerciali. Io utilizzerò l'editor Libero Frhed.

Una volta aperto l'editor, apriamo il file del progetto VBA. Se è un progetto Excel apriremo il file .xls, se è un progetto AutoCAD sarà un file .dvb, e cosi via a seconda di che tipo di file crea il software che lo ha prodotto.

Ciò che ci apparirà sarà qualcosa del genere :

Editor Esadecimale

Incomprensibile? Si, ma non importa.

A questo punto, dal menu Edit usiamo la funzione Find e cerchiamo la parola magica DPB :

VBA qpd

Perchè ho definito DPB parola magica? Perchè è quella che ci permetterà di accedere al nostro sorgente anche se non ci ricordiamo la password.

Sicuramente troveremo almeno un DPB:

VBA Ricerca

A questo punto sostituiamo DPB con DPx, ottenendo :

VBA dpx

Ripetiamo la ricerca e la sostituzione per tutte le parole DBP che troviamo.

Fatto? Ok. Salviamo il nostro file.

Abbiamo fatto poco, ma è sufficiente

Ultime operazioni, prima delle conclusioni.

Apriamo il nostro programma (Excel, AutoCAD, o quello che utilizziamo) e carichiamo il nostro progetto modificato.

La prima cosa che comparirà sarà un messaggio di errore simile a questo :

VBA Load Error

Non ci interrompiamo e rispondiamo Si (o Yes) alla domanda. Seguiranno una serie di piccoli messaggi, altri errori, ma non c'è problema, confermiamo con Ok ogni maschera:

VBA Error

Una volta conclusi i messaggi, apriamo il nostro ambiente VBA e tentiamo di accedere al progetto appena caricato. La prima cosa che salterà agli occhi è il fatto che sono visibili le form contenute nel progetto.

Non facciamo nulla. Limitiamoci a selezionare il nostro progetto sulla sinistra, clicchiamo sul menu Tools e accediamo alle Properties, cosi:

VBA Tools

Andiamo nella sezione Protection e, senza disattivare la password, inseriamo una nuova parola chiave:

VBA Proprietà

Supponiamo di aver usato, come nuova password, la parola "ridere".

Giunti a questo punto, confermiamo con Ok, salviamo il progetto e chiudiamo tutto. Abbiamo finito!

Riapriamo il nostro software e ricarichiamo il progetto VBA.

Da ora in poi potremo accedere al sorgente della nostra applicazione usando la password "ridere".

Progetto VBA

Alcune considerazioni finali

Se qualcuno pensa che proteggere con la password i propri progetti VBA sia un sistema di sicurezza, si sbaglia.

La password di VBA può essere vista in un solo modo. E' un sistema per evitare modifiche accidentali, magari da parte di utenti curiosi.

Nulla di più.

Da un punto di vista della protezione del proprio lavoro o dal punto di vista della segretezza, la password di VBA fa semplicemente ridere.

Ciò che sto dicendo è una cosa nuova? No. Come ho gia detto, il sistema che ho mostrato è molto conosciuto e documentato in rete. Nulla di nuovo.

C'è chi pensa che io non debba scrivere articoli come questo per non favorire la "curiosità" degli utenti, che magari potrebbero decidere di aprire qualche applicazione VBA per vedere come è fatta. Io invece sostengo che, informazioni come quelle presentate qui, dovrebbero essere molto diffuse in modo che, chi decide di utilizzare VBA, sia ben conscio di quanto valga la password che magari ha in mente di utilizzare.

Nonostante questa leggerezza della password, VBA è un ottimo sistema di sviluppo. Facile da apprendere ed utilizzare, permette lo sviluppo di applicazioni anche sofisticate. E' adatto a tutti, dal principiante al professionista.

Riferimenti

Alcuni articoli che trattano il medesimo argomento:

Alcuni software che utilizzano VBA:

Editor esadecimali:

Immagine principale utilizzata in questo articolo:

Licenza di questo articolo

Licenza Creative Commons
Questo articolo è distribuita con Licenza Creative Commons Attribuzione - Condividi allo stesso modo 4.0 Internazionale.