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 :
- Microsoft Office.
- AutoCAD.
- ZwCAD.
- BricsCAD.
- IntelliCAD e tutti i suoi derivati dotati di VBA.
- Solidworks.
- in genere qualsiasi software che utilizzi, internamente, l'ambiente di sviluppo VBA.
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 :
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:
Nella maschera delle Properties, nella scheda Protection, attiviamo e impostiamo la password di accesso.
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:
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 :
Incomprensibile? Si, ma non importa.
A questo punto, dal menu Edit usiamo la funzione Find e cerchiamo la parola magica DPB :
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:
A questo punto sostituiamo DPB con DPx, ottenendo :
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 :
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:
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:
Andiamo nella sezione Protection e, senza disattivare la password, inseriamo una nuova parola chiave:
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".
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:
- http://superuser.com/questions/807926/how-to-bypass-the-vba-project-password-from-excel.
- http://www.dragmar.com/public/?p=140.
Alcuni software che utilizzano VBA:
- Microsoft Office.
- AutoCAD.
- IntelliCAD.
- Solidworks.
- in genere qualsiasi software che utilizzi, internamente, l'ambiente di sviluppo VBA.
Editor esadecimali:
Immagine principale utilizzata in questo articolo:
Licenza di questo articolo
Questo articolo è distribuita con Licenza Creative Commons Attribuzione - Condividi allo stesso modo 4.0 Internazionale.