首页>工作相关>如何利用VBA移除EXCEL文件的密码保护

如何利用VBA移除EXCEL文件的密码保护

收到了客户两张电子表格,需要修改几项数据,其中一张表格是直接可以修改的,但同一压缩包里的另一个文件则显示收保护,读取没问题,修改就不行了,询问客户密码也是一问三不知。无奈在51CTO找了这么一个暴力测试的方案,程序会在成功后弹窗提示该文件可能的密码。类似的代码在知乎也看到过,51CTO的更为简洁但删除了一些作者注释(包含代码作者信息),于是重新翻了一下知乎,加上了代码作者的名字。

Sub PasswordBreaker()
    '作者:McCormick JE McGimpsey
    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

程序会尝试一些可能的密码组合,因为组合较多,所以过于复杂的密码会耗费较长时间,耐心等待。当然一般表格保护只是用于避免用户误操作,极少会设置复杂度爆表的密码。这里的多重循环,实际上前面几段都是在重复取A或者B,仅For n = 32 To 126这一句测试了多个字符,博主测试了一下密码12345,破解后提示可用密码为AABBAABBBAAW,感觉这段程序并不是单纯的暴力破解,而是利用了EXCEL的密码生成机制。

标签: excel

移动端可扫我直达哦~

推荐阅读

excel 2024-01-09

EXCEL如何跳过空白单元格粘贴内容

除了函数与功能太多,随用随忘之外,个人觉得excel堪称完美,即便随用随忘,那始终还是博主自身存储空间和存储质量的原因。就好像类似下面的需求,把一段包含空格的内容隔行穿插到左边的单元格内。明明是曾经操作过的,但如何解决的却一下又想不起...

工作相关 excel

excel 2023-09-14

Excel仅复制已筛选出来的单元格

利用Excel可以很方便的对数据进行筛选,但是如果框选筛选完成的数据,然后直接复制粘贴的话,我们会得到一个完整的包含所有数据的表格。快捷键筛选其实只是把不符合条件的单元格暂时的隐藏了起来,如果仔细观察一下屏幕左侧的行号,可以发现此时行...

工作相关 excel

excel 2023-05-10

利用excel实现函数数据的保存与删除

刚工作的时候,因为经常要把订单整理出具体要求,然后下发到车间,所以diy了一个订单系统,利用了一些excel自动生成数据的函数。比如用“today()”来实现下单的日期,用“sum()”来统计总体的数量。这个简陋的管理系统用于打印是没...

工作相关 excel

excel 2023-05-10

Excel快递单根据地区填写预计签收日期

excel中有很多关于日期的函数,博主比较常用的是“today()”,因为工作中经常需要印发订单到车间,订单上的下发日期上写上一个这个函数,因为该函数会随日期自动变化,所以就一劳永逸了。偶尔也碰到过客户单项的数量与合计数量不符的情况,...

工作相关 excel

excel 2023-01-10

excel求和过程中如何忽略错误的值

设计逻辑不够严谨的表格中,往往会遇到“被零除”错误,表格中会显示“#DIV/0!”字样,如果对包含该错误的单元格进行求和操作,在求和格子中,用户往往也会收到一个相同的错误。修改表格逻辑当然是治标又治本的方法,但是当我们急于想知道其他非...

工作相关 excel

excel 2022-10-14

用excel根据列表自动填写快递面单

整理网盘的时候翻到一个很久以前做的表格,根据表格地址自动定位数据打印快递面单。涉及到了工作薄内不同表格间的数据调用,以及vba弹出窗口的返回信息,贴在博客上以便将来有需要的时候查找。表格的vba代码Sub test() Dim...

工作相关 excel

excel 2022-10-13

excel文件内工作表太多如何快速定位

excel一个文件可以视为一个工作薄,一个工作薄可以包含多张表格,将多张表格统一放在一个文件中,可以方便的进行数据的分析与交换,也更易于管理。但当表格数目较多时,仅依靠左下角的前进与后退按钮感觉是有点不够用的,这里介绍两种快速切换工作...

工作相关 excel

excel 2022-10-13

excel如何在打印时每页都显示相同表头标题

正常打印的时候,excel会按顺序打印表格的内容,表格的标题只会出现在第一页上,有时候数据比较多,希望后续的打印页上也出现表头与标题的时候,我们需要使用excel中的页面布局功能来实现。选择页面布局菜单,打开打印标题选项;这里的示例是...

工作相关 excel

excel 2022-10-12

如何用excel实现一个级联菜单

级联菜单是一种常见的计算机菜单格式,其中一个菜单中选定的选项用于确定下一个菜单中哪些选项可用。开发人员将可能的值列表分为两个或多个逻辑级别,每一个级别都显示在一个菜单中,用户可以在做出最终选择之前缩小所有可能选项的范围,从而更快捷的检...

工作相关 excel

excel 2022-10-10

excel中的ctrl+d与ctrl+r自动填充

在excel中,有着比较灵活的数据填充方式,以最大程度的减少手工输入,提高使用效率,比如我们可以使用快捷键ctrl+d实现向右填充,也可以使用ctrl+r实现向右填充。单元格填充选中需要复制内容单元格所在位置正下方的格子,按ctrl+...

工作相关 excel

excel 2022-10-09

用excel统计空格与非空格的数量

从网上复制了一组数据,在excel分割成表,发现数据排列顺序正确。但有几列完整,有几列含有空格,数据缺失,补充完整后想检查一下是否还有遗漏,就想到了这个功能,检查一下所选范围中的空格数量。统计行数或列数使用函数:COUNT函数参数:r...

工作相关 excel

excel 2022-10-09

excel冻结窗格后怎样不打印隐藏的区域

这其实是一个伪命题,冻结窗格只是让一部分表格在表格被拖动时始终悬停在屏幕上,这个功能经常用于显示表头,但冻结窗格仅针对表格的显示效果,实际数据并未被隐藏,所以打印时也会被正常显示出来,所以就造成了显示视图与实际打印效果不符的情况。想要...

工作相关 excel