简体   繁体   中英

Password Cracker of Protected Sheet in Excel 2013 and Later using VBA

Anybody knows if there are other ways to crack a password of a protected sheet in excel? I have been using these codes ever since but now, it doesn't seem to work anymore. The file just says "Not Responding" every time I run the code. I'm using MS Office 2013.

Sub PasswordBreaker()
'Breaks worksheet password protection.
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
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

Excel has updated their sheet protection security in Excel 2013 and newer so this macro won't work anymore, see here .

From the link it sounds like if you save the file as an xls file (Excel 1997-2003) it is forced to drop the newer security as it wasn't compatible with the file type. You could then run your macro.

Saving as an older file version may make certain parts of the workbook not work.

Thanks Kawi, that works perfectly.

Here is the full code with Kawi's modification:

Sub PasswordBreaker()
'Breaks worksheet password protection.
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
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
Debug.Print Chr(i) & Chr(j) & Chr(k) _
      & Chr(l) & Chr(m) & Chr(i1) _
      & Chr(i2) & Chr(i3) & Chr(i4) _
      & Chr(i5) & Chr(i6) & Chr(n)
DoEvents
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

I'm not sure how this works but I was able to Unprotect the sheet. I did a "save as" and changed the Type to: "Excel 97-2003". When I opened the file & unprotect the sheet, it did not ask for a password anymore. :) And my workbook still works fine.

Since a recent update, Excel has an issue with a high try rate to command Unprotect. A few slow-down makes the code run again: Put something like this right before the Unprotect line, ie into the most inner loop:

Debug.Print Chr(i) & Chr(j) & Chr(k) _
      & Chr(l) & Chr(m) & Chr(i1) _
      & Chr(i2) & Chr(i3) & Chr(i4) _
      & Chr(i5) & Chr(i6) & Chr(n)
DoEvents

With this (speed-) modification, the initial mentioned approach works also with Excel 2013 and Excel 2016.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM