16

I have an Excel workbook.

Two years ago I set password protection option for one of the sheets. Now I have forgotten the password. Is there any way to recover the password of that Excel sheet?

0

1 Answer 1

20

You cannot recover THE password, but you can unprotect the sheet(The hash used to protect the sheet is quite prone to collisions in the old versions of excel, so generating a collision is quite fast here).

There are scripts availale the will brute force open your sheet within a very short amount of time.

Take a look here for example: http://www.theofficeexperts.com/VBASamples/Excel02.htm

Here's the code:

Sub PasswordBreaker()
  'Author unknown but submitted by brettdj of www.experts-exchange.com

  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)
   ActiveWorkbook.Sheets(1).Select
   Range("a1").FormulaR1C1 = 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
6
  • +1 possible solution. Other way around it..program an app with Apache POI and Digester. Get through the file and copy it without touching the password. (Yes in some ways it is possible)
    – user8885
    Sep 22, 2009 at 9:26
  • 2
    +1 Works like a charm and gets a collision in under 10 seconds.
    – Johan
    Dec 21, 2011 at 9:01
  • Wow. Incredible that collisions are (almost?) certain under 194,560 tries. I've had mine at the about 3000th iteration. That's about 17 bits total entropy!
    – jonallard
    Jan 30, 2013 at 2:10
  • Any non-vba way? I'm on OSX and the whole file is protected.
    – Jonny
    Jul 11, 2014 at 0:59
  • I'm pretty sure this won't work on Excel files protected with Excel 2013 and later, due to increased encryption levels. Feb 1, 2017 at 18:55