This Blog

Syndication

Search

Tags

News

Community

Email Notifications

Archives

Grupos de Usuários

Blogs MVPs Brasil

Sites

Recuperando senha de proteção de planilha Excel

Digamos que você colocou uma senha de proteção em sua planilha, mas acabou esquecendo ela e agora precisa liberar o acesso à edição da mesma. O que fazer?

Aqui apresento um script que utiliza a abordagem de força bruta para contornar este problema.

Antes de partirmos para o script vamos entender uma coisa. O excel armazena o hash da senha informada e não a senha em si. Por um lado isto é muito positivo, mas por outro reduz a segurança. Por que? Porque basta que obtenhamos uma senha que gere o mesmo hash  que teremos acesso aos dados, mesmo que ela não seja a mesma informada na hora da proteção. Pois é exatamente isto que o meu código faz, um ataque de força bruta (testando todas as combinações, baseado na tabela ASC-II) para obter um hash semelhante.

Este código funciona muito bem para o Excel até a versão 2003. Da versão 2007 em diante a coisa complica, pois passa a ser usado outro sistema de segurança que é MUITO mais complexo de se burlar.

Sub QuebraSenhaEsquecida()

'Declara variáveis
Dim i As Integer, j As Integer, k As Integer
Dim l As Integer, m As Integer, n As Integer
Dim i1 As Integer, i2 As Integer, i3 As Integer
Dim i4 As Integer, i5 As Integer, i6 As Integer

'Define a faixa por onde devem ocorrer os testes. São não preciso testar exatamente todas combinações em todas posições, pois se quero obter um hash
On Error Resume Next
For i = 65 To 66: For j = 65 To 66: For k = 65 To 66
For l = 65 To 66: For m = 65 To 66: For i1 = 65 To 66
For i2 = 65 To 66: For i3 = 65 To 66: For i4 = 65 To 66
For i5 = 65 To 66: For i6 = 65 To 66: For n = 32 To 126

'Identifica se senha funcionou
ActiveSheet.Unprotect Chr(i) & Chr(j) & Chr(k) & _
 Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) _
 & Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)

'Mostra senha funcional em mensagem (não é a que foi utilizada quando da proteção)
If ActiveSheet.ProtectContents = False Then
 MsgBox "Uma senha utilizável é " & Chr(i) & Chr(j) _
 & Chr(k) & Chr(l) & Chr(m) & Chr(i1) & Chr(i2) _
 & Chr(i3) & Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
 Exit Sub
End If
Next: Next: Next: Next: Next: Next
Next: Next: Next: Next: Next: Next

End Sub

Published Tue, Sep 28 2010 11:11 by paleo
Filed under: