这个密码破解器是如何工作的? 它也可以适应其他的东西吗?

我不得不使用这个代码从受保护的表中删除密码,没有人知道密码,我有兴趣了解它是如何工作的,是否可以调整从其他Excel位,如工作簿结构或工作簿密码?

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散列密码的方式存在漏洞,所以实际上只有194K个不同的散列值。

详细讨论 :
原因是您input的密码(即使用工具/保护/保护工作表或/保护工作簿)不能直接用于保护。 相反,它们被散列(math转换)成一个不太安全的代码。 实际上,任何长度的密码都被转换成12个字符的string,其中前11个字符只有两个可能的值之一。 剩余的字符可以有多达95个可能的值,导致只有

 2^11 * 95 = 194,560 

潜在的密码。 这可能看起来很多,但现代计算机只需要几秒钟就可以全部尝试。 作为比较,包含26个小写字母字符的4个字符的密码具有456,976个组合,并且由小写字母,大写字母和数字0-9组成的3个字符的密码将具有238,328个组合。

同样,无论您的原始密码是什么,这些194Kstring中的一个将会解锁您的工作表或工作簿。