代码之家  ›  专栏  ›  技术社区  ›  axk

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

  •  8
  • axk  · 技术社区  · 17 年前

    my previous one .

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

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

    3 回复  |  直到 9 年前
        1
  •  14
  •   Phil.Wheeler    17 年前

    VBA安全性被广泛认为非常差。VBA代码未编译,源代码在excel文件中可用。密码保护很容易规避。

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

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

    Excel VBProject对象具有保护属性,该属性将根据宏的保护状态返回不同的枚举( vbext_pp_locked 例如,如果宏受保护)。如果您继续以编程方式尝试密码,直到 vbext\u pp\u已锁定 如果计算为false,您将找到密码。

        2
  •  3
  •   Community Mohan Dere    6 年前

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

    here .

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

    • 保护工作簿内容:1=受保护
    • 密码的密码哈希值;0=没有密码
    • PROT4REV共享工作簿:1=受保护

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

        3
  •  -1
  •   Morosho    12 年前

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

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

    粘贴自其博客上的前一篇文章:

    1. 将文件扩展名更改为“.zip”,由任何archiver程序打开它。
    2. 查找文件:“vbaProject.bin”(在“xl”文件夹中)。
    3. 从档案中提取它。
    4. 用十六进制编辑器打开刚解压缩的文件。
    5. DPB=“282A84CBA1CBA1345FCCB154E20721DE77F7D2378D0EAC90427A22021A46E9CE6F17188A”。(此值是为“宏”密码生成的。您可以使用此DPB值跳过步骤1-8)

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

    7. 如果复制的值小于加密文件中的值,则应使用0(零)填充缺少的字符。如果值较长-这不是问题(按原样粘贴)。

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

    9. 将扩展名从“.zip”更改回“.xlsm”
    10. 现在,打开需要查看VBA代码的excel文件。VBA代码的密码 将只是宏(如我在这里展示的示例中所示)。