Vous êtes sur la page 1sur 11

CONTRASEA HOJA DE EXCEL

Cualquiera de nosotros, a pesar de tener la mejor memoria del mundo, hemos olvidado la
contrasea de una hoja de Excel.
Tenemos un archivo cualquiera en Excel, por ejemplo este de la figura
Y se nos ha creado un contratiempo importante, porque en ese momento tenamos la urgencia
mayor de nuestra vida.
Pues todo esto es una minscula parte de nuestros problemas.
Lo que voy a ensearos es la manera en que no sirve para nada poner una contrasea a una hoja
de Excel, es triste pero esta es la otra parte de la moneda.
Lo voy a explicar, como siempre, para que puedan entender los principiantes.
Tenemos el archivo siguiente

Esta hoja est protegida con una contrasea que la hemos olvidado. Pero os lo digo en secreto
que la contrasea es:
1Disco Duro Petado. En mi Cabeza [{***++--**//]}
Podemos ver que puede ser difcil de sacarla.

Ahora os pongo un script (no os asustis porque el asunto es muy sencillo)

Attribute VB_Name = "Mdulo1"


Sub Descubrir_contrasea()
Dim a As Integer, b As Integer, c As Integer
Dim d As Integer, e As Integer, f As Integer
Dim a1 As Integer, a2 As Integer, a3 As Integer
Dim a4 As Integer, a5 As Integer, a6 As Integer
On Error Resume Next
For a = 65 To 66: For b = 65 To 66: For c = 65 To 66
For d = 65 To 66: For e = 65 To 66: For a1 = 65 To 66
For a2 = 65 To 66: For a3 = 65 To 66: For a4 = 65 To 66
For a5 = 65 To 66: For a6 = 65 To 66: For f = 32 To 126
Contrasea = Chr(a) & Chr(b) & Chr(c) & Chr(d) & Chr(e) & Chr(a1) _
& Chr(a2) & Chr(a3) & Chr(a4) & Chr(a5) & Chr(a6) & Chr(f)
ActiveSheet.Unprotect Contrasea
If ActiveSheet.ProtectContents = False Then
MsgBox "Enorabuena!" & vbCr & "La contrasea es:" & vbCr & Contrasea
Exit Sub
End If
Next: Next: Next: Next: Next: Next
Next: Next: Next: Next: Next: Next
End Sub

Marcas desde "Attribute" hasta "End Sub" y lo copias en el portapapeles (botn derecho y copiar).
Abres el Bloc de Notas (Inicio ... Todos los Programas ... Accesorios ... Bloc de Notas)
Botn derecho y Pegar, ya est casi.

Ahora slo nos queda Salvarlo como, en Archivo ... Guardar como.
Lo guardas donde quieras y le pones el nombre que quieras pero con extensin "bas".
En Tipo debemos seleccionar Todos los Archivos.
Yo lo he llamado "SacarContrasenaHojaExcel.bas" (sin comillas).
Lo escribes a mano como se ve en la figura.

Ya tenemos hecha la parte ms complicada del asunto, ahora slo queda emplear este archivo en
la hoja de Excel.
Para ello, en la hoja de Excel, Herramientas ... Macro ... Editor de Visual Basic

Ahora tenemos que Importar el archivo que hemos creado con el famoso script. Vamos a
Archivo ... Importar archivo ...
Buscamos la carpeta donde lo hemos guardado, lo pinchamos para marcarlo y Abrir

En este momento ya tenemos el famoso archivo a nuestra disposicin dentro de la hoja de excel
(podemos acceder a l).
Ahora cerramos Visual Basic y nos presentamos en nuestra hoja de Excel.
Vamos a Herramientas ... Macro ... Macros...

Slo tenemos que clicar en Ejecutar y esperar hasta que aparezca

Bueno, ya tenemos la hoja de Excel sin la contrasea.


Para este caso me ha tartado 75 segundos.
Pero ahora viene lo ms curioso, vemos que en la ventana nos pone una contrasea que no es la
que tenamos puesta ... pues queridos, siempre que pongamos la contrasea que tenamos puesta
la podremos desproteger con aquella y tambin con esta (que es equivalente).

ESTO ES TODO, ESPERO QUE OS HAYA SACADO DE UN APURO A ALGUNO.

CONTRASEAS HOJA Y LIBRO DE EXCEL


La operativa es la misma que en el caso anterior, slamente que el script es distinto.
A continuacin el script:

Public Sub AllInternalPasswords()


' Encuentra los passwords que tengan tanto el libro como las hojas de clculo
' individuales. El algoritmo original probablmente se le debe a Bob McCormick, el
' cual se modific para cubrir toda la estructura del libro con passwords mltiples.
'
' La versin 1.1 se les debe a Norman Harker y JE McGimpsey. 27 de diciembre de 2002
' JE McGimpsey prepar la versin 1.1.1 el 4 de abril de 2004,cambiando todos los
' mensajes a constantes y eliminando un EXIT SUB
'
' Puesto que Excel no guarda los passwords orginales, sino una versin modificada
' de los mismos, esta macro NO encuentra los passwords originales, sino los passwords
' guardados, que son suficientes para desproteger el libro y las hojas individuales.
'
' Traducido libremente al espaol por Fernando Carrillo el 12 de octubre de 2006
' (versin 1.1.1esp)
Const DBLSPACE As String = vbNewLine & vbNewLine
Const AUTHORS As String = DBLSPACE & vbNewLine & _
"Adaptado del cdigo base de Bob McCormick " & _
"por Norman Harker y JE McGimpsey." & vbNewLine & _
"Traducido al espaol por Fernando Carrillo"
Const HEADER As String = "Mensaje de usuario: Todos los Passwords Internos"
Const VERSION As String = DBLSPACE & "Versin 1.1.1esp 6-oct-2006"
Const REPBACK As String = DBLSPACE & "Favor de reportar cualquier falla " & _
"a www.ofisol.com.mx"
Const ALLCLEAR As String = DBLSPACE & "El libro est " & _
"libre de passwords, por favor:" & _
DBLSPACE & "GUARDELO AHORA!" & DBLSPACE & "y recuerde:" & _
DBLSPACE & "RESPALDE!, RESPALDE!!, RESPALDE!!!" & _
DBLSPACE & "Adems, tenga en cuenta que el password fue " & _
"puesto por alguna razn. No guarde aqu frmulas importantes ni " & _
"datos sin password." & DBLSPACE & "Leer o usar la informacin " & _
"a la que ahora tiene acceso puede ser un delito. Si duda, no lo haga."
Const MSGNOPWORDS1 As String = "No haba passwords en " & _
"las hojas, estructura del libro ni en las ventanas." & AUTHORS & VERSION
Const MSGNOPWORDS2 As String = "No haba proteccin en " & _
"la estructura del libro ni en las ventanas." & DBLSPACE & _
"Procediendo a desproteger hojas." & AUTHORS & VERSION
Const MSGTAKETIME As String = "Despus de presionar el botn ACEPTAR " & _
"tendr que esperar un rato, ya que se probarn diferentes " & _
"combinaciones de letras." & DBLSPACE & "La cantidad de tiempo que tomar " & _
"la bsqueda depende de cuntos passwords diferentes haya " & _

"y las caractersticas de su computadora." & DBLSPACE & _


"Sea paciente! Prepreme un caf!" & AUTHORS & VERSION
Const MSGPWORDFOUND1 As String = "Exista un password en " & _
"la estructura del libro o en las ventanas." & DBLSPACE & _
"El password encontrado es: " & DBLSPACE & "$$" & DBLSPACE & _
"Por favor antelo por si pudiera usarlo en otros libros " & _
"del mismo autor." & DBLSPACE & _
"Buscando y borrando otros passwords." & AUTHORS & VERSION
Const MSGPWORDFOUND2 As String = "Exista un password en " & _
"la hoja." & DBLSPACE & "El password encontrado es: " & _
DBLSPACE & "$$" & DBLSPACE & "Por favor antelo por si " & _
"pudiera usarlo en otras hojas del mismo autor" & _
"." & DBLSPACE & "Buscando y borrando " & _
"otros passwords." & AUTHORS & VERSION
Const MSGONLYONE As String = "Se encontr que el password hallado " & _
"protega estructura y ventanas." & _
ALLCLEAR & AUTHORS & VERSION & REPBACK
Dim w1 As Worksheet, w2 As Worksheet
Dim i As Integer, j As Integer, k As Integer, l As Integer
Dim m As Integer, n As Integer, i1 As Integer, i2 As Integer
Dim i3 As Integer, i4 As Integer, i5 As Integer, i6 As Integer
Dim PWord1 As String
Dim ShTag As Boolean, WinTag As Boolean
Application.ScreenUpdating = False
With ActiveWorkbook
WinTag = .ProtectStructure Or .ProtectWindows
End With
ShTag = False
For Each w1 In Worksheets
ShTag = ShTag Or w1.ProtectContents
Next w1
If Not ShTag And Not WinTag Then
MsgBox MSGNOPWORDS1, vbInformation, HEADER
Exit Sub
End If
MsgBox MSGTAKETIME, vbInformation, HEADER
If Not WinTag Then
MsgBox MSGNOPWORDS2, vbInformation, HEADER
Else
On Error Resume Next
Do
'dummy do loop
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
With ActiveWorkbook
.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)
If .ProtectStructure = False And _
.ProtectWindows = False Then
PWord1 = Chr(i) & Chr(j) & Chr(k) & Chr(l) & _
Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & _
Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)

MsgBox Application.Substitute(MSGPWORDFOUND1, _
"$$", PWord1), vbInformation, HEADER
Exit Do 'Bypass all for...nexts
End If
End With
Next: Next: Next: Next: Next: Next
Next: Next: Next: Next: Next: Next
Loop Until True
On Error GoTo 0
End If
If WinTag And Not ShTag Then
MsgBox MSGONLYONE, vbInformation, HEADER
Exit Sub
End If
On Error Resume Next
For Each w1 In Worksheets
'Attempt clearance with PWord1
w1.Unprotect PWord1
Next w1
On Error GoTo 0
ShTag = False
For Each w1 In Worksheets
'Checks for all clear ShTag triggered to 1 if not.
ShTag = ShTag Or w1.ProtectContents
Next w1
If ShTag Then
For Each w1 In Worksheets
With w1
If .ProtectContents Then
On Error Resume Next
Do
'Dummy do loop
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
.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)
If Not .ProtectContents Then
PWord1 = Chr(i) & Chr(j) & Chr(k) & Chr(l) & _
Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & _
Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
MsgBox Application.Substitute(MSGPWORDFOUND2, _
"$$", PWord1), vbInformation, HEADER
'leverage finding Pword by trying on other sheets
For Each w2 In Worksheets
w2.Unprotect PWord1
Next w2
Exit Do 'Bypass all for...nexts
End If
Next: Next: Next: Next: Next: Next
Next: Next: Next: Next: Next: Next
Loop Until True
On Error GoTo 0
End If

End With
Next w1
End If
MsgBox ALLCLEAR & AUTHORS & VERSION & REPBACK, vbInformation, HEADER
End Sub

Sub breakit()
Dim i As Integer, j As Integer, k As Integer
Dim l As Integer, m As Integer, n As Integer
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
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)
If ActiveSheet.ProtectContents = False Then
MsgBox "One usable password is " & 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

Vous aimerez peut-être aussi