14

I have an Excel workbook.

Two years before 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?

17

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
| improve this answer | |
  • +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 '09 at 9:26
  • 2
    +1 Works like a charm and gets a collision in under 10 seconds. – Johan Dec 21 '11 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 '13 at 2:10
  • Any non-vba way? I'm on OSX and the whole file is protected. – Jonny Jul 11 '14 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. – Ƭᴇcʜιᴇ007 Feb 1 '17 at 18:55