这个问题与我之前的问题有关。
您能否解释或提供解释 Excel VBA 代码密码保护在 2007 年之前的版本中如何实际工作的链接?Excel 2007 和以前的版本在密码保护方面有什么区别?
Excel的密码保护是否真的加密了代码?如果代码被加密,Excel如何执行代码?
最后,excel密码删除软件是如何工作的?
这个问题与我之前的问题有关。
您能否解释或提供解释 Excel VBA 代码密码保护在 2007 年之前的版本中如何实际工作的链接?Excel 2007 和以前的版本在密码保护方面有什么区别?
Excel的密码保护是否真的加密了代码?如果代码被加密,Excel如何执行代码?
最后,excel密码删除软件是如何工作的?
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
评估为假,您就会找到您的密码。
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 中工作簿保护块的结构:
密码块存储一个 16 位哈希值,根据工作表或工作簿保护密码计算得出。
有人制作了一个有效的 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) 文件,请执行以下步骤:
从参数 DPB 中查找并复制值(引号中的值),例如:DPB="282A84CBA1CBA1345FCCB154E20721DE77F7D2378D0EAC90427A22021A46E9CE6F17188A"。(此值是为“宏”密码生成的。您可以使用此 DPB 值跳过步骤 1-8)
对密码未知的文件(要解锁的文件)执行步骤 4-7。
根据您在步骤 8 中复制的值更改此文件中的 DBP 值。
如果复制的值比加密文件中的短,您应该用 0(零)填充缺失的字符。如果值更长 - 这不是问题(按原样粘贴)。
保存“vbaProject.bin”文件并退出十六进制编辑器。