2008-11-03 159 views
7

这个问题与my previous oneExcel VBA代码的密码保护如何工作?

您是否可以解释或提供一个链接,以说明Excel VBA代码密码保护在2007年之前的版本中的实际工作原理? Excel 2007和以前版本在密码保护方面有什么不同?

还有Excel的密码保护其实是加密代码吗?如果Excel执行加密,Excel如何执行?

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

回答

13

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,则您将找到您的密码。

+0

我不知道2007年是否有一个选项只存储工作簿中宏的字节码,允许您在没有源的情况下提供函数? – DaveParillo 2010-01-20 16:59:29

+0

该功能不是(AFAIK)烘焙到任何版本的Office。相反,期望的是,如果您特别想要捆绑Office文件的自动化功能,则可以使用Visual Studio Tools for Office(VSTO)编写自己的DLL并将其作为加载项存储。 – 2010-01-20 20:03:42

3

菲尔是正确的 - 密码阻止你看模块,他们没有加密自己。我知道在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版本,并取决于文档类型。

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

工作簿保护块出现在大多数BIFF流中的DEFINEDNAME块(即命名范围)之后,尽管BIFF8与该模式有很大的偏差。记录保护块在BIFF5 - BIFF8工作簿保护块的结构:

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

密码块存储16位散列值,从工作表或工作簿保护密码计算出来。

-1

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

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

  9. 对于密码未知的文件(要解锁的文件)执行步骤4-7。在价值这个文件

  10. 变化DBP值,可以在第8步

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

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

  12. 用已修改的文件替换现有的'vbaProject.bin'文件。从“.ZIP”回“.XLSM”
  13. 现在
  14. 变化extention,打开Excel文件,你需要看到在VBA代码。对VBA代码的密码 将只是宏(如上例我在这里展示)。