Excel VBA代码的密码保护如何工作?

时间:2008-11-03 20:46:15

标签: security excel vba excel-vba password-protection

此问题与my previous one有关。

您能解释或提供一个链接,说明Excel VBA代码密码保护在2007年之前的版本中是如何实际运行的吗? Excel 2007和以前版本在密码保护方面有什么区别?

Excel的密码保护实际上是否加密了代码?如果代码加密,Excel如何执行代码?

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

3 个答案:

答案 0 :(得分: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评估为false,您就会找到密码。

答案 1 :(得分:3)

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

  

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

     

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

     

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

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

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

答案 2 :(得分:-1)

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

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

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

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

  1. 创建一个新的.xlsm文件。
  2. 在VBA部分中,设置一个简单的密码(例如'macro')。
  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代码的密码 将只是宏(如我在这里展示的例子)。