Probabilmente il commento di Microsoft a questo articolo sarebbe:
"La password non vuole essere un mezzo di sicurezza, solo un metodo per
evitare modifiche accidentali dei documenti importanti ".
Si dimostrerà che è effettivamente così!
Nella guida in linea, però, all’argomento “Proteggere un foglio di
lavoro o una cartella di lavoro con una password”, è in evidenza la nota:
“(...) Assicurarsi di scegliere una password facile da
ricordare poiché, se la si dimentica, non è più possibile accedere agli
elementi protetti del foglio di lavoro.”
Chi legge la guida in linea è spinto a pensare che i suoi dati saranno al
sicuro se protetti con password, non solo da modifiche accidentali ma anche da
quelle meno accidentali.
Fatta questa premessa, illustrerò come sia semplice rimuovere la protezione
di un foglio di lavoro o una cartella di lavoro protetta con password.
<_div align="center" style="margin: 0cm 0cm 0pt; text-align: center; line-height: normal;">
Per
impostare le protezioni a cui mi riferirò i percorsi sono:
Strumenti>Protezione>Proteggi
foglio … password
Strumenti>Protezione>Proteggi
cartella di lavoro … password
Prima di
mostrare il codice VBA e le modalità per eseguirlo mi preme fare alcune
precisazioni:
- è possibile rimuovere qualsiasi
password utilizzando una stringa composta da soli valori binari (0 e 1) [es.
se la password è “roberto” si può rimuovere con “1011111000001”] e
questa è la scoperta più significativa
- è possibile rimuovere la
password con tale stringa e proteggere nuovamente utilizzando la medesima
stringa e nessuno se ne accorgerà (chiaramente salvando le modifiche
risulterete gli autori dell’ultima modifica) [es. se la password è
“1011111000001” si potrà rimuovere con “roberto”]
- non è possibile risalire con
sicurezza alla stringa utilizzata come password per proteggere il foglio o
la cartella
- la stringa utilizzata come
password e la stringa binaria non sono le uniche utilizzabili per
rimuovere la protezione [es. se la password è “roberto” si può rimuovere
con “1011111000001” ma anche con “0101111008” e con chissà quante altre
combinazioni … altri esempi? “AAA” si rimuove con “!!a”, “aaa” con !!Q,
“abc” con “! R” ].
È giunto il
momento di entrare nel dettaglio e illustrare le modalità per rimuovere la
password che vi siete scordati!
Iniziamo
aggiungendo un modulo al progetto VBA. Per i non esperti nell’uso del Editor
VBA:
1. Aprire la
cartella di lavoro Excel su cui si desidera rimuovere la password
2. Aprire
l’Editor VBA (Alt+F11 oppure Strumenti>Macro>Visual Basic Editor
3.
Nell’Editor aggiungere un modulo (Inserisci>modulo)
4. Copiare
il codice che riporto qui sotto e incollarlo nel modulo appena creato
'xxxxxxxxxxxxxxxxxxx
copiare da qui xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Option
Explicit
Dim arr As Variant
Dim arr2(30) As Long
Sub IniziaArr2()
Dim i As Integer
arr = Array(1, 2, 4, 8, 16, 32, 64, 128, 256,
512, 1024 _
, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, _
524288, 1048576, 2097152, 4194304, 8388608, 16777216, _
33554432, 67108864, 134217728, 268435456, 536870912, _
1073741824)
'valori da 2^0 a 2^30
For i = 0 To 30
arr2(i) = arr(i)
Next i
End Sub
Function decbin(dec As Long) As String
Dim i As Integer, a As Integer, bin As String
bin = "0" 'nel caso dec sia = 0
For i = 30 To 0 Step -1
If dec And arr2(i) Then
bin = ""
For a = i To 0 Step -1
Select Case
dec And arr2(a)
Case 0
bin = bin & "0"
Case Else
bin = bin & "1"
End Select
Next a
Exit For
End If
Next i
decbin = bin
End Function
Sub psw2()
Dim i As Long
Dim start As Single
Dim bin As String
Call IniziaArr2
start = Timer
On Error Resume Next
i = 0
Do
i = i + 1
bin = decbin(i)
ActiveSheet.Unprotect Password:=bin
Loop While ActiveSheet.ProtectContents = True
MsgBox
"La password è stata rimossa con " & _
bin & " che è il binario di
" & i & _
Chr(10) & "il programma ha
impiegato " & _
Timer - start & "
secondi"
Debug.Print bin & " " & i
End Sub
'xxxxxxxxxxxxxxxxxxx a qui xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Fatto tutto?
Bene …
allora potete eseguire psw2:
dalla
cartella Excel …
Strumenti>Macro>Macro scegliere psw2 e premere Esegui
dal Editor
VBA … premere
F5 oppure Esegui>Esegui Sub/UserForm scegliere psw2 e premere Esegui
Un messaggio
vi avviserà quando la protezione al vostro foglio attivo è stata rimossa.
Per rimuovere la protezione della cartella è sufficiente fare alcune
sostituzioni:
ActiveSheet.Unprotect
diventa
ActiveWorkbook.Unprotect
ActiveSheet.ProtectContents
diventa
ActiveWorkbook.ProtectStructure
Il tempo necessario per rimuovere la protezione
varia da pochi secondi a pochi minuti (nelle mie prove ho rimosso una password
di 16 caratteri composta da numeri, lettere maiuscole e minuscole in poco più
di 2 minuti). |