不需密码解除工作簿保护

9

我有一段流行的VBA代码可以取消保护工作表,但问题是工作簿已经被保护。

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

请添加VBA代码。 - Abhishek
新的保护措施基于加密技术,无法轻易移除。 - Vojtěch Dohnal
2个回答

28

尝试以下代码以取消工作簿的保护。在Excel 2010中对我有效,但我不确定它是否适用于2013。

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
    ThisWorkbook.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 ThisWorkbook.ProtectStructure = 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

3
如果有人对两者之间的变化感兴趣,请查看以下链接:https://gist.github.com/tobya/e144806a4e3974ec4852/revisions - Toby Allen
1
当需要访问文件的VBA时,这个程序如何去除工作簿(文件)保护呢?因为它使用了ThisWorkbook。 - Ryszard Jędraszyk
1
@RyszardJędraszyk VBA保护和工作簿保护是分开的。VBA保护是一个独立的问题,不是这个问题所讨论的内容。 - Yaegz
对我来说在2013年很好用,但需要一些随机点击。运行脚本后,我使用从弹出窗口中收到的密码“保护”了工作簿,然后再次取消保护,现在所有工作表都已解锁。 - MightyPork
3
我的Excel 2016无法运行,所以我使用了一个变通方法。将文件保存为“.xls”并使用代码。然后再保存为“.xlsx”。请注意,某些功能可能会丢失,如果超过65,536行,则超出“.xls”文件支持的最大行数的行将会丢失! - danieltakeshi
显示剩余7条评论

5

不再适用于使用Excel 2013或更高版本进行保护的电子表格——他们改进了密码哈希算法。因此现在需要解压缩 .xlsx 文件并对内部进行破解。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接