Passwortschutz aus Excel-Datei entfernen

Passwortschutz aus Excel-Datei entfernen

13. Mai 2021 0 Von Björn Meijer

Excel-Dateien haben die Möglichkeit, sie mit einem Passwortschutz zu versehen. Ich benutze es nur einmal. Zum Beispiel, um zu verhindern, dass Formeln in Zellen gelöscht oder geändert werden. Ein wichtiger Teil der Verwendung eines Passworts ist es, es nicht zu vergessen. Was können Sie tun, wenn Sie eine Excel-Datei haben, für die Sie das Passwort nicht kennen?

[Inhaltsverzeichnis]

Unterschiedlicher Passwortschutz in Excel

Sie können Excel auf fünf verschiedene Arten mit einem Passwort schützen:

  1. Datei vor dem Öffnen schützen.
  2. Datei vor Änderungen schützen.
  3. Arbeitsblatt schützen.
  4. Arbeitsmappe schützen.
  5. VBAProject-Sicherheit.

Jedes Wertpapier hat einen anderen Zweck und sollte auf unterschiedliche Weise angegangen werden.

So schützen Sie Excel-Dateien mit Passwörtern

Wir haben oben gelesen, dass ein Excel-Dokument fünf verschiedene Passwortschutze hat. Diese Schutzmaßnahmen können auf drei verschiedene Arten implementiert werden. Durch:

  • Eine XML-Datei.
  • Verschlüsselung.
  • Binäres VBA-Projekt.

xml-Datei

Ab Version Excel 2007 wurde das Standard-Excel-Dateiformat von .xls auf .xlsx geändert. Dies liegt an der technischen Änderung der Dateistruktur. Die .xlsx-Dateien sind also sozusagen .zip-Dateien, die aus XML-Dateien bestehen. Dies hat den Vorteil, dass die Größe Ihrer Dateien erheblich kleiner ist und Entwicklern mehr Möglichkeiten bieten, da sie Zugriff auf die zugrunde liegende Struktur der XML-Dateien haben.

Verschlüsselung

Ab Version Excel 2007 hat sich das Sicherheitsniveau enorm erhöht. Wenn wir eine Datei vor dem Öffnen schützen, wird die Excel-Datei verschlüsselt.

Binäres VBA-Projekt

Die Passwörter oder die verschlüsselten Versionen dieser Passwörter werden in der Binärdatei selbst gespeichert.

Entfernen verschiedener Arten von Passwortschutz

Knacken Sie das Passwort einer Excel-Datei, die vor dem Öffnen geschützt ist

Diese Art des Passwortschutzes kann nur durch Brute-Force-Angriffe geknackt werden. Mit anderen Worten, die Software versucht, das Passwort anhand verschiedener Buchstaben- und/oder Zahlenkombinationen zu „erraten“. Je einfacher das Passwort, desto leichter ist es zu knacken.

Knacken Sie das Passwort einer gegen Veränderung geschützten Excel-Datei

Der Passwortschutz (soweit wir davon sprechen können) lässt sich leicht aufheben, indem die Datei unter einem anderen Namen gespeichert wird. Einfach ist es nicht?

Knacken Sie das Passwort eines geschützten Arbeitsblatts oder einer Arbeitsmappe

Dafür stehen uns zwei Methoden zur Verfügung. Wie hier oben beschrieben, besteht eine Excel-Datei aus dem Jahr 2007 aus XML-Dateien. Excel speichert das Kennwort nicht in diesen Dateien, sondern verwendet einen Algorithmus, der den Code ändert. Dann wird der geänderte Code in der xlsx-Datei gespeichert. Der Schutz wird entfernt, wenn ein Passwort durch den Algorithmus das gleiche Ergebnis liefert.

Manuelles Knacken eines geschützten Arbeitsblatts oder einer geschützten Arbeitsmappe

Laden Sie die Beispieldatei herunter und speichern Sie sie in einem Ordner auf Ihrem Computer

Stellen Sie sicher, dass die Dateierweiterungen sichtbar sind.

Dateinamenerweiterung im Windows Explorer anzeigen
  1. Erstellen Sie eine Kopie der Beispieldatei und ändern Sie die Erweiterung in .zip
Passen Sie die Erweiterung im Windows-Explorer an
  1. Öffnen Sie die Datei „Datei mit Passwort.zip“.
  2. Öffnen Sie die Datei \xl\workbooks.xml, um eine geschützte Arbeitsmappe zu entsperren.
  3. Öffnen Sie die Datei \xl\worksheets\sheet1.xml, um ein geschütztes Arbeitsblatt zu entsperren.
  4. Der eingerahmte Abschnitt enthält den Code, der das Kennwort für die Arbeitsmappe codiert.
  5. Entfernen Sie diesen Abschnitt aus der XML-Datei und speichern Sie ihn.
  6. Platzieren Sie die geänderten Dateien wieder in der ZIP-Datei und ändern Sie die Erweiterung in .xlsx.
xml-Format der geschützten Arbeitsmappe
xml-Datei der geschützten Arbeitsmappe
xml-Format des geschützten Arbeitsblatts
xml-Datei des geschützten Arbeitsblatts

Knacken eines geschützten Arbeitsblatts oder einer Arbeitsmappe mit einem Makro

Das obige Verfahren kann auch schneller und einfacher durchgeführt werden, indem es von einem Makro ausgeführt wird. Erstellen Sie eine neue Excel-Datei und kopieren Sie den folgenden Code in ein Standardmodul des Visual Basic-Editors.

Sub RemoveProtection() Dim dialogBox As FileDialog Dim sourceFullName As String Dim sourceFilePath As String Dim sourceFileName As String Dim sourceFileType As String Dim newFileName As Variant Dim tempFileName As String Dim zipFilePath As Variant Dim oApp As Object Dim FSO As Object Dim xmlSheetFile As String Dim xmlFile As Integer Dim xmlFileContent As String Dim xmlStartProtectionCode As Double Dim xmlEndProtectionCode As Double Dim xmlProtectionString As String 'Dialogfeld öffnen, um eine Datei auszuwählen Set dialogBox = Application.FileDialog(msoFileDialogFilePicker) dialogBox.AllowMultiSelect = False dialogBox.Title = "Datei auswählen, um Schutz zu entfernen from" If dialogBox.Show = -1 Then sourceFullName = dialogBox.SelectedItems(1) Else Exit Sub End If 'Ordnerpfad, Dateityp und Dateinamen von sourceFullName abrufen sourceFilePath = Left(sourceFullName, InStrRev(sourceFullName, "\") ) sourceFileType = Mid(sourceFullName, InStrRev(sourceFullName, ".") + 1) sourceFileName = Mid(sourceFullName, Le n(sourceFilePath) + 1) sourceFileName = Left(sourceFileName, InStrRev(sourceFileName, ".") - 1) 'Datum und Uhrzeit verwenden, um einen eindeutigen Dateinamen zu erstellen tempFileName = "Temp" & Format(Now, " dd-mmm -yy h-mm-ss") 'Originaldatei kopieren und in eine ZIP-Datei mit einem eindeutigen Namen umbenennen newFileName = sourceFilePath & tempFileName & ".zip" On Error Resume Next FileCopy sourceFullName, newFileName If Err.Number <> 0 Then MsgBox "Kopieren nicht möglich" & sourceFullName & vbNewLine _ & "Überprüfen Sie, ob die Datei geschlossen ist, und versuchen Sie es erneut" Exit Sub End If On Error GoTo 0 'Ordner zum Entpacken in zipFilePath erstellen = sourceFilePath & tempFileName & "\" MkDir zipFilePath 'Extrahieren Sie die Dateien in den neu erstellten Ordner Set oApp = CreateObject("Shell.Application") oApp.Namespace(zipFilePath).CopyHere oApp.Namespace(newFileName).items 'jede Datei im Ordner \xl\worksheets der entpackten Datei xmlSheetFile durchlaufen = Dir(zipFilePath & "\xl\worksheets\*.xml*") Do While xmlSheetFile <> "" 'Text der Datei in eine variable xmlFile lesen = FreeFile Öffne zipFilePath & "xl\worksheets\" & xmlSheetFile Zur Eingabe als xmlFile xmlFileContent = Input(LOF(xmlFile), xmlFile) Schließe xmlFile 'Text in der Datei manipulieren xmlStartProtectionCode = 0 xmlStartProtectionCode = InStr(1, xmlFileContent, " 0 Then xmlEndProtectionCode = InStr(xmlStartProtectionCode, _ xmlFileContent, "/>") + 2 '"/>" ist 2 Zeichen lang xmlProtectionString = Mid(xmlFileContent, xmlStartProtectionCode, _ xmlEndProtectionCode - xmlStartProtectionCode) xmlFileContent = Replace(xmlFileContent, xmlProtectionString, "" ) End If 'Gib den Text der Variable in die Datei aus xmlFile = FreeFile Open zipFilePath & "xl\worksheets\" & xmlSheetFile For Output As xmlFile Print #xmlFile, xmlFileContent Close xmlFile 'Loop to next xmlFile in directory xmlSheetFile = Dir Loop 'Read Text der Datei xl\workbook.xml in eine Variable xmlFile = FreeFile Öffne zipFilePath & "xl\workbook.xml" Für die Eingabe als xmlFile xmlFileContent = Input(LOF(xmlFile), xmlFile) Schließe xmlFile 'Bearbeite den Text in der Datei zu Arbeitsmappenschutz entfernen xmlStartProtectionCode = 0 xmlStartProtectionCode = InStr(1, xmlFileContent, " 0 Then xmlEndProtectionCode = InStr(xmlStartProtectionCode, _ xmlFileContent, "/>") + 2 ''"/>" ist 2 Zeichen lang xmlProtectionString = Mid(xmlFileContent, xmlStartProtectionCode, _ xmlEndProtectionCode - xmlStartProtectionCode) xmlFileContent = Replace(xmlFileContent, xmlProtectionString, " ") End If 'Manipulieren Sie den Text in der Datei, um das Änderungskennwort zu entfernen xmlStartProtectionCode = 0 xmlStartProtectionCode = InStr(1, xmlFileContent, " 0 Then xmlEndProtectionCode = InStr(xmlStartProtectionCode, xmlFileContent, _ "/>") + 2 ''"/>" ist 2 Zeichen lang xmlProtectionString = Mid(xmlFileContent, xmlStartProtectionCode, _ xmlEndProtectionCode - xmlStartProtectionCode) xmlFileContent = Replace(xmlFileContent, xmlProtectionString, " ") End If 'Gib den Text der Variable in die Datei aus xmlFile = FreeFile Open zipFilePath & "xl\workbook.xml" & xmlSheetFile For Output As xmlFile Print #xmlFile, xmlFileContent Close xmlFile 'Leere Zip-Datei erstellen Open sourceFilePath & tempFileName & " .zip" Für die Ausgabe als #1 Drucken Sie #1, Chr$(80) & Chr$(75) & Chr$(5) & Chr$(6) & String(18, 0) Schließen Sie #1 'Dateien in die Zip-Datei oApp.Namespace(sourceFilePath & tempFileName & ".zip").CopyHere _ oApp.Namespace(zipFilePath).items 'Skript warten lassen, bis die Komprimierung abgeschlossen ist = _ oApp.Namespace(zipFilePath).items.Count Appl ication.Wait (Now + TimeValue("0:00:01")) Loop On Error GoTo 0 'Lösche die Dateien und Ordner, die während des Untersatzes erstellt wurden FSO = CreateObject("scripting.filesystemobject") FSO.deletefolder sourceFilePath & tempFileName ' Benennen Sie die endgültige Datei wieder in eine xlsx-Datei um Name sourceFilePath & tempFileName & ".zip" As sourceFilePath & sourceFileName _ & "_" & Format(Now, "dd-mmm-yy h-mm-ss") & "." & sourceFileType 'Meldungsfeld anzeigen MsgBox "Die Passwörter für den Arbeitsmappen- und Arbeitsblattschutz wurden entfernt.", _ vbInformation + vbOKOnly, Title:="Passwortschutz" End Sub

Führen Sie das obige Makro aus und wählen Sie die Datei aus, deren Arbeitsblatt oder Arbeitsmappe geschützt ist. Das Makro erstellt dann eine Kopie der Datei und entfernt den/die Passwortschutz(e).

Häufige Fehlermeldungen und Lösungen

Laufzeitfehler 53: Die Datei kann nicht gefunden werden.

  • Die Excel-Datei ist ein .xlsb-Dateityp (binäre Excel-Datei). Das Makro funktioniert nur bei .xlsx-Dateien.

Laufzeitfehler 76: Die Datei kann nicht gefunden werden.

  • Die Excel-Datei ist ein .xls-Dateityp. Das Makro funktioniert nur bei .xlsx-Dateien.
  • Die Datei ist gegen Öffnen geschützt.

Laufzeitfehler 91: Objektvariable oder mit Blockvariable nicht gesetzt.

  • Sie versuchen, das Makro auf einem Mac auszuführen. Das Makro funktioniert nur auf einem Windows-Computer.

Knacken eines binären VBA-Projekts

Mit dem folgenden Makro ist es möglich, ein gesichertes VBA-Projekt zu entsperren. Das Makro wurde von einem vietnamesischen Softwareentwickler erstellt. Den Originalcode finden Sie unter Paketüberfluss.

  • Öffnen Sie die Datei, deren VBA-Projekt passwortgeschützt ist.
  • Erstellen Sie eine neue XLSM-Datei und kopieren Sie den folgenden Code in ein Standardmodul des Visual Basic-Editors.
  • Führen Sie den unteren Teil des Codes aus und das Passwort wird entfernt.

Achtung! Das folgende Makro funktioniert nur bei VBA-Projekten, die mit einem Passwort versehen sind und mit der standardmäßigen Excel-Passwortoption erstellt wurden. Ein durch Unviewable+ passwortgeschütztes VBA-Projekt kann nicht geknackt werden.

Private Const PAGE_EXECUTE_READWRITE = &H40 Private Declare PtrSafe Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" _ (Destination As LongPtr, Source As LongPtr, ByVal Length As LongPtr) Private Declare PtrSafe Function VirtualProtect Lib "kernel32" (lpAddress As LongPtr, _ ByVal dwSize As LongPtr, ByVal flNewProtect As LongPtr, lpflOldProtect As LongPtr) As LongPtr Private Declare PtrSafe Function GetModuleHandleA Lib "kernel32" (ByVal lpModuleName As String) As LongPtr Private Declare PtrSafe Function GetProcAddress Lib "kernel32" (ByVal hModule As LongPtr, _ ByVal lpProcName As String) As LongPtr Private Declare PtrSafe Function DialogBoxParam Lib "user32" Alias "DialogBoxParamA" (ByVal hInstance As LongPtr, _ ByVal pTemplateName As LongPtr, ByVal hWndParent As LongPtr, _ ByVal lpDialogFunc As LongPtr, ByVal dwInitParam As LongPtr) As Ganzzahl Dim HookBytes(0 bis 11) als Byte Dim OriginBytes(0 bis 11) als Byte Dim pFunc als LongPtr Dim Flag als boolesche private Funktion GetPtr(ByVal Val ue As LongPtr) As LongPtr GetPtr = Wert End Function Public Sub RecoverBytes() If Flag Then MoveMemory ByVal pFunc, ByVal VarPtr(OriginBytes(0)), 12 End Sub Public Function Hook() As Boolean Dim TmpBytes(0 To 11) As Byte Dimp As LongPtr, osi As Byte Dim OriginProtect As LongPtr Hook = False #If Win64 Then osi = 1 #Else osi = 0 #End If pFunc = GetProcAddress(GetModuleHandleA("user32.dll"), "DialogBoxParamA") If VirtualProtect(ByVal pFunc , 12, PAGE_EXECUTE_READWRITE, OriginProtect) <> 0 Then MoveMemory ByVal VarPtr(TmpBytes(0)), ByVal pFunc, osi+1 If TmpBytes(osi) <> &HB8 Then MoveMemory ByVal VarPtr(OriginBytes(0)), ByVal pFunc, 12 p = GetPtr(AddressOf MyDialogBoxParam) If osi Then HookBytes(0) = &H48 HookBytes(osi) = &HB8 osi = osi + 1 MoveMemory ByVal VarPtr(HookBytes(osi)), ByVal VarPtr(p), 4 * osi HookBytes(osi + 4 * osi) = &HFF HookBytes(osi + 4 * osi + 1) = &HE0 MoveMemory ByVal pFunc, ByVal VarPtr(HookBytes(0)), 12 Flag = True Hook = True End If End If End Function Private Funktion MyDialogBoxParam(ByVal hInstance As LongPtr, _ ByVal pTemplateName As LongPtr, ByVal hWndParent As LongPtr, _ ByVal lpDialogFunc As LongPtr, ByVal dwInitParam As LongPtr) As Integer If pTemplateName = 4070 Then MyDialogBoxParam = 1 Else RecoverBytes MyDialogBoxParam = DialogBoxParam, pTemplateTemName , _ hWndParent, lpDialogFunc, dwInitParam) Hook End If End Function '''' DEN CODE UNTEN AUSFÜHREN'''' Sub VBAUnprotected() If Hook Then MsgBox "VBA Project is unprotected!", vbInformation, "*****" End If End Sub