579 Stimmen

Gibt es eine Möglichkeit, das Kennwort für ein Excel-VBA-Projekt zu knacken?

Ich wurde gebeten, einige Excel 2003-Makros zu aktualisieren, aber die VBA-Projekte sind passwortgeschützt, und es scheint, dass es an Dokumentation mangelt... niemand kennt die Passwörter.

Gibt es eine Möglichkeit, das Kennwort für ein VBA-Projekt zu entfernen oder zu knacken?

16voto

Spangen Punkte 4123

Für den Fall, dass Ihr Block von CMG="XXXX"\r\nDPB="XXXXX"\r\nGC="XXXXXX" in Ihrer Datei "Bekanntes Kennwort" kürzer ist als der vorhandene Block in der Datei "Unbekanntes Kennwort", füllen Sie Ihre Hex-Zeichenketten mit nachgestellten Nullen auf, um die richtige Länge zu erreichen.

z.B..

CMG="xxxxxx"\r\nDPB="xxxxxxxx"\r\nGC="xxxxxxxxxx"

in der Datei mit dem unbekannten Kennwort sollte auf

CMG="XXXX00"\r\nDPB="XXXXX000"\r\nGC="XXXXXX0000" um die Dateilänge zu erhalten.

Ich habe dies auch mit XLA-Dateien (97/2003-Format) in Office 2007 ausprobiert.

13voto

user3761175 Punkte 139

Für Excel 2007 und höher müssen Sie die Dateierweiterung in .zip ändern. In dem Archiv gibt es einen Unterordner xl, in dem Sie vbaProject.bin finden. Führen Sie den obigen Schritt mit vbaProject.bin aus und speichern Sie es wieder im Archiv. Ändern Sie die Erweiterung zurück und voilà! (d.h. folgen Sie den obigen Schritten)

12voto

Luboš Suk Punkte 1452

Ich habe einige der oben genannten Lösungen ausprobiert und keine von ihnen funktioniert bei mir (Excel 2007 xlsm-Datei). Dann fand ich eine andere Lösung, die sogar abrufen Passwort, nicht nur knacken es.

Fügen Sie diesen Code in das Modul ein, führen Sie ihn aus und geben Sie ihm etwas Zeit. Es wird Ihr Passwort mit roher Gewalt wiederherstellen.

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

10voto

Yuhong Bao Punkte 3721

Colin Pickard hat größtenteils Recht, aber verwechseln Sie nicht den "Kennwort zum Öffnen"-Schutz für die gesamte Datei mit dem VBA-Kennwortschutz, der sich völlig von ersterem unterscheidet und für Office 2003 und 2007 gleich ist (für Office 2007 benennen Sie die Datei in .zip um und suchen Sie nach der vbaProject.bin in der zip-Datei). Der technisch korrekte Weg, die Datei zu bearbeiten, besteht darin, einen OLE-Compound Document Viewer wie CFX zu verwenden, um den richtigen Stream zu öffnen. Wenn Sie nur Bytes ersetzen wollen, kann natürlich auch der einfache alte Binäreditor verwendet werden.

Übrigens, wenn Sie sich über das genaue Format dieser Felder wundern, es ist jetzt dokumentiert:

http://msdn.microsoft.com/en-us/library/dd926151%28v=office.12%29.aspx

7voto

SheetJS Punkte 21311

Wenn die Datei eine gültige Zip-Datei ist (die ersten paar Bytes sind 50 4B -- verwendet in Formaten wie .xlsm ), entpacken Sie dann die Datei und suchen Sie nach der Unterdatei xl/vbaProject.bin . Dies ist eine CFB-Datei, genau wie die .xls Dateien. Befolgen Sie die Anweisungen für das XLS-Format (auf die Unterdatei angewandt) und zippen Sie dann einfach den Inhalt.

Für das XLS-Format können Sie einige der anderen Methoden in diesem Beitrag anwenden. Ich persönlich bevorzuge die Suche nach dem DPB= Block und Ersetzen des Textes

CMG="..."
DPB="..."
GC="..."

mit Leerzeichen. Dadurch werden Probleme mit der CFB-Behältergröße vermieden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X