8

这个问题与我之前的问题有关。

您能否解释或提供解释 Excel VBA 代码密码保护在 2007 年之前的版本中如何实际工作的链接?Excel 2007 和以前的版本在密码保护方面有什么区别?

Excel的密码保护是否真的加密了代码?如果代码被加密,Excel如何执行代码?

最后,excel密码删除软件是如何工作的?

4

3 回答 3

14

VBA 的安全性被广泛认为是很差的。VBA 代码未编译,源代码在 excel 文件中可用。密码保护很容易绕过。

据我了解,Office 2003 及更早版本将 vba 代码保存为工作表(或文档/演示文稿)的二进制格式的一部分。当您启动 VBA IDE 时,它只是查看 VBA 代码是否已被“保护”。这并不意味着它已加密 - 只是无法查看。理论上,这可以阻止您的用户干预您的代码,但核心编码人员将能够绕过密码。

所以 Excel 不需要解密任何代码——它只需要阻止人们查看它。

Office 2007确实加密了宏(不要问我如何或什么算法)。这可能是必要的,因为 XLSM 文件(或任何 Office 2007 文件)只是具有不同扩展名的 zip 文件。任何人都可以进入这些文件并四处寻找。

要回答您的最后一个问题 - 旧版 Office 格式的密码删除如何工作,我不完全确定。不同的供应商可能会以不同的方式解决问题,但我怀疑最常见的方法是对密码进行暴力攻击,直到找到匹配项。

Excel VBProject 对象有一个 Protection 属性,它将根据宏的保护状态返回不同的枚举(vbext_pp_locked例如,如果宏受保护)。如果您继续以编程方式尝试密码,直到vbext_pp_locked评估为假,您就会找到您的密码。

于 2008-11-04T02:26:03.783 回答
3

Phil 是正确的 - 密码阻止您查看模块,它们本身没有加密。我知道在 excel 2007 中,文件本质上是 XML 和其他文件的压缩集合,但我不知道如何处理加密的细节。对于早期版本 - excel 2、3、4、5、95、97、2000、XP 和 2003,有 Microsoft Excel 文件格式的综合 OpenOffice.org 文档

Excel 文件格式被命名为 BIFF(二进制交换文件格式)。它用于存储所有类型的文档:工作表文档、工作簿文档和工作区文档。此文件格式有不同版本,具体取决于写入文件的 Excel 版本以及文档类型。

多张工作簿文档(BIFF5-BIFF8)通常使用复合文档文件格式(也称为“OLE2 存储文件格式”或“Microsoft Office 兼容存储文件格式”)进行存储。它包含用于不同类型数据的多个流。可以在此处找到复合文档文件格式的完整文档。

在大多数 BIFF 流中,工作簿保护块紧接在 DEFINEDNAME 块(即命名范围)之后,尽管 BIFF8 与该模式有很大不同。记录保护块 Biff5 - Biff8 中工作簿保护块的结构:

  • WINDOWPROTECT 窗口设置:1 = 受保护
  • PROTECT 工作簿内容:1 = 受保护
  • PASSWORD 密码的哈希值;0 = 无密码
  • PROT4REV 共享工作簿:1 = 受保护
  • PROT4REVPASS 共享密码的哈希值;0 = 无密码

密码块存储一个 16 位哈希值,根据工作表或工作簿保护密码计算得出。

于 2010-01-20T16:45:32.787 回答
-1

有人制作了一个有效的 vba 代码,将所有 excel 文件的 vba 保护密码更改为“宏”,包括 .xlsm(2007+ 版本)。你可以通过浏览他的代码来了解它是如何工作的。

这是这个家伙的博客: http: //lbeliarl.blogspot.com/2014/03/excel-removing-password-from-vba.html 这是工作的文件:https ://docs.google.com/file/ d/0B6sFi5sSqEKbLUIwUTVhY3lWZE0/编辑

从他的博客上的一篇文章中粘贴:

对于 Excel 2007/2010 (.xlsm) 文件,请执行以下步骤:

  1. 创建一个新的 .xlsm 文件。
  2. 在 VBA 部分,设置一个简单的密码(例如“宏”)。
  3. 保存文件并退出。
  4. 将文件扩展名更改为“.zip”,由任何存档程序打开它。
  5. 找到文件:“vbaProject.bin”(在“xl”文件夹中)。
  6. 从存档中提取它。
  7. 使用十六进制编辑器打开刚刚提取的文件。
  8. 从参数 DPB 中查找并复制值(引号中的值),例如:DPB="282A84CBA1CBA1345FCCB154E20721DE77F7D2378D0EAC90427A22021A46E9CE6F17188A"。(此值是为“宏”密码生成的。您可以使用此 DPB 值跳过步骤 1-8)

  9. 对密码未知的文件(要解锁的文件)执行步骤 4-7。

  10. 根据您在步骤 8 中复制的值更改此文件中的 DBP 值。

    如果复制的值比加密文件中的短,您应该用 0(零)填充缺失的字符。如果值更长 - 这不是问题(按原样粘贴)。

  11. 保存“vbaProject.bin”文件并退出十六进制编辑器。

  12. 用修改后的文件替换现有的“vbaProject.bin”文件。
  13. 将扩展名从“.zip”改回“.xlsm”
  14. 现在,打开您需要在其中查看 VBA 代码的 excel 文件。VBA 代码的密码将只是宏(如我在此处显示的示例中所示)。
于 2014-03-28T21:44:11.677 回答