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

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

你能解释一下,或提供一个链接,说明Excel VBA代码密码保护如何在2007年之前的版本中实际工作? Excel 2007和以前版本在密码保护方面有什么不同?

Excel的密码保护实际上是encryption代码吗? 如果Excel执行encryption,Excel如何执行?

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

VBA安全被广泛认为是相当差的。 VBA代码没有被编译,并且源代码在excel文件中可用。 密码保护很容易规避。

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

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

Office 2007对macros进行encryption(不要问我如何或者什么algorithm)。 这是必要的,因为XLSM文件(或任何Office 2007文件)只是具有不同扩展名的zip文件。 任何人都可以进入这些文件,并捅了一圈。

回答最后一个问题 – 如何删除旧的Office格式的密码,我不完全确定。 不同的供应商可能会以不同的方式来解决这个问题,但是我怀疑最常见的方法是在密码被发现之前对密码进行powershell攻击。

Excel VBProject对象具有一个Protection属性,它将根据macros的保护状态返回不同的枚举( vbext_pp_locked如果macros受保护,则为vbext_pp_locked )。 如果您要继续以编程方式尝试密码,直到vbext_pp_locked计算结果为false,您将find您的密码。

菲尔是正确的 – 密码阻止你看模块,他们没有encryption自己。 我知道在Excel 2007中,一个文件本质上是一个XML和其他文件的压缩集合,但我不知道如何处理encryption的细节。 对于早期版本 – Excel 2,3,4,5,95,97,2000,XP和2003,有全面的OpenOffice.org的Microsoft Excel文件格式的文档 :

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

通常使用复合文档文件格式(也称为“OLE2存储文件格式”或“Microsoft Office兼容存储文件格式”)存储具有多个工作表(BIFF5-BIFF8)的工作簿文档。 它包含几个不同types的数据stream。 复合文档文件格式的完整文档可以在这里find。

工作簿保护块紧挨在大多数BIFFstream中的DEFINEDNAME块(即命名范围)之后,尽pipeBIFF8是与该模式的主要偏离。 logging保护块在Biff5 – Biff8工作簿保护块的结构:

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

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

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

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

从以前的博客贴出他的博客:

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

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

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

  10. 在第8步中复制的值中更改此文件中的DBP值。

    如果复制值比encryption文件中的短,则应使用0(零)填充缺less的字符。 如果价值更长 – 这不是问题(按原样粘贴)。

  11. 保存'vbaProject.bin'文件并退出hex编辑器。

  12. 用已修改的文件replace现有的“vbaProject.bin”文件。
  13. 将“.zip”的扩展名更改回“.xlsm”
  14. 现在,打开你需要查看VBA代码的excel文件。VBA代码的密码就是macros(就像我在这里展示的例子)。