您能否解释一下或提供有关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对象具有保护属性,该属性将返回不同的枚举,具体取决于宏的保护状态(如果宏受保护,则为vbext_pp_locked
,例如)。如果您以编程方式不断尝试密码,直到vbext_pp_locked
评估为false,则已找到密码。
有人编写了一个有效的VBA代码,可以将所有Excel文件(包括.xlsm(2007+版本))的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)文件,请执行以下步骤:
在参数DPB中查找并复制值(引号中的值),例如: DPB=“282A84CBA1CBA1345FCCB154E20721DE77F7D2378D0EAC90427A22021A46E9CE6F17188A”。 (此值是为'macro'密码生成的。您可以使用此DPB值跳过步骤1-8)
对于未知密码的文件(要解锁的文件),执行步骤4-7。
在此文件中将DBP值更改为您在第8步中复制的值。
如果复制的值比加密文件中的值短,则应使用0填充丢失的字符。如果值较长-那没问题(直接粘贴即可)。
保存'vbaProject.bin'文件并退出十六进制编辑器。