有没有一种方法可以破解Excel VBA项目的密码?

577

我被要求更新一些Excel 2003的宏,但是这些VBA项目都被密码保护了,并且似乎缺少文档...没有人知道密码。

有没有一种方法可以删除或破解VBA项目的密码?


你能否将文件另存为 .xls 格式,而不是像你链接中的示例那样保存为 .xla 格式?不确定这是否会有所不同。 - B Hart
4
好的了解:xlsb对密码破解技巧具有强大的抵抗能力。 - Qbik
34
@Fandango68 这个问题在数年前的 meta 上已经讨论过了(https://meta.stackexchange.com/q/137086)。简而言之:SO上的很多(大多数?)问题都有可能被不良分子滥用,但除非有明确的不良行为证据,我们会假定其善意。破解VBA密码存在着合法和道德层面的原因。此外,讨论当前系统的弱点最终有助于提高未来的安全性并防止人们盲目地依赖不安全的系统。 - jmbpiano
3
对于那些偶然看到这篇文章的人,请注意你可以在 OpenOffice 中打开这个 Excel 文件,它会在不需要输入密码的情况下打开所有内容。 - Aditya Singh
25个回答

4

保护是在Excel中进行简单文本比较的操作。 在您喜欢的调试器(我选择Ollydbg)中加载Excel,找到执行比较操作的代码并将其修复为始终返回true,这样就可以访问宏了。


2
对于在Windows 10机器上的Excel 2016 64位版本,我使用十六进制编辑器更改了受保护的xla文件的密码(未测试其他扩展名)。 提示:在进行此操作之前,请备份文件。
我采取的步骤如下:
  1. 在十六进制编辑器中打开vba(例如XVI)。
  2. 搜索DPB。
  3. 将DPB更改为其他内容,例如DPX。
  4. 保存!
  5. 重新打开.xla文件,会出现错误消息,只需继续即可。
  6. 现在,您可以通过打开属性并转到密码选项卡来更改.xla的密码。
希望这对你们有所帮助!

1
我成功地在Windows 10上使用最新版本的Excel 365打开了一个旧的.xls文件,而顶部答案不幸地已经无法使用。我下载了HxD并按建议更改了最后一个字母,并跳过了错误。现在一切都很好,谢谢! - Starnes Student

1
如果您从事Java编程,可以尝试使用VBAMacroExtractor。从.xlsm文件中提取VBA脚本后,我发现密码以明文形式存在。

0

你需要将Excel文件的扩展名更改为xml,并在记事本中打开它。密码文本可以在xml文件中找到。

你会看到类似下面的行:

Sheets("Sheet1").Unprotect Password:="blabla"

(抱歉我的英语不好)


你能解释一下你的答案为什么比已经提供的非常好的答案更好吗? - Noel Widmer
我的解决方案没有代码。所以除此之外还有非常紧凑的解决方案。 - Developer33
4
你提供的解决方案在2019年无效。 - Daniel L. VanDenBosch

0

移除VBA项目密码的一个简单方法是执行以下操作:

  1. 将xlsm文件转换为zip
  2. 打开其中的VBAProject.bin文件(我喜欢使用Notepad++ (https://notepad-plus-plus.org/downloads/)
  3. 查找DPB字段
  4. 用DPx替换它
  5. 保存文件
  6. 将zip文件转换为xlsm
  7. 打开Excel文件
  8. 如果弹出消息框,请选择“是”
  9. 为VBA项目属性设置新密码
  10. 关闭并重新打开文件
  11. 输入您的新密码以取消保护

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