MS Excel中的VBA项目保护

你好!我是MS Excel的普通用户。不是专业的程序员,但是已经积累了足够的经验来安装和绕过VBA项目的保护。



免责声明:



本文介绍了VBA项目免遭未经授权的访问的保护类型。他们的优点和缺点都是排名。



本文的目的是说明MS Office中VBA项目的每种保护类型的优缺点。



Macro Tools VBA附件中演示了已开发的工具,用于删除和安装一个或另一个保护。 



所有工具均使用标准VBA工具实现,而无需使用其他库。 





主面板加载项Macro Tools VBA



第一类保护-常规密码



删除时间:立即



缺点:快速访问受密码保护的VBA模块



标准工具(在VBE中:工具面板-> VBAProject属性->保护)。 



最容易拆卸的保护装置。在Internet上很容易找到删除此保护的代码。 



可以使用以下工具删除此保护:





第二种保护类型-项目不可见



删除时间:10到15分钟(手动)



缺点:访问VBA模块的源代码是



最常见的保护类型之一。在95%具有VBA模块保护的文件中找到该文件。当您尝试打开一个项目时,将打开一个对话框,显示以下消息:  Project is Unviewable。





大多数Excel用户无法删除此保护,因为它具有许多变体和细微差别;要删除它,您需要对Excel文件的内部结构有所了解。



这种类型的保护基于更改密钥:



CMG=«4A488FCC54D054D054D054D0»

DPB=«0B09CE0F8E108E108E»

GC=«CCCE09520B120C120CED»




在文件中vbaProject.bin。 





简要介绍如何创建此保护



要创建此保护,您需要解压缩Excel文件。转到档案中的xl文件夹,打开vbaProject.bin文件,文件末尾是我们的密钥,将密钥值编辑为空,保存文件。我们将存档文件转换回Excel文件。做完了! 



这是此保护的最简单的版本,但是有很多修改。



删除保护项目的算法不可见。



1)解压缩实验文件,转到文件  ... \ xl \ _rels \ workbook.xml.rels









2)在文件workbook.xml.rels中,  我们寻找包含单词vbaProject的行  ,通常看起来像这样:  />。在这一行中,我们对Target及其值感兴趣。该值是包含VBA项目的文件的名称。有时保护器会将键值更改为printerSettings.bin。事实证明,带有VBA项目的文件被伪装为另一个文件。



3)打开目标键中指定的文件进行编辑在文件中查找CMG,DPB,GC键  。并且我们将名称中的任何字母更改为其他字母,例如:CMC,DPC,CC...搜索时,您需要小心,因为防御者可以将带有签名并重复其中一个密钥的表单放入项目中,例如:DPB =“ 0B09CE0F8E108E108E”。更改后,VBA项目将从Excel工作簿中删除。我们保存并关闭文件。



4)我们将档案传输回Excel文件。



5)启动Excel应用程序,执行以下操作:在“信任中心”->“宏选项”->“禁用所有宏而无需通知”。重新启动Excel。需要执行此操作来阻止保护,有时由宏的作者设置保护。该保护的实现如下。在VBA模块中“ ThisBook”,将创建响应于打开书本或关闭书本事件的过程。这些事件通常检查VBA项目的密码是否存在,是否禁止保存等。



6)打开文件。如果一切正确完成,则Excel将对我们在第3段中编辑的不正确的按键发誓。单击“是”,直到这些消息结束并且对话框关闭。 



      如果未出现此消息,则说明您尚未编辑包含VBA项目的文件。





7)打开VBA项目。毕竟,VBA项目应该可用。



8)但是有时候保护没有被删除,那么您需要保存文件,检查它是否真的被保存了!并再次完成步骤1到7这通常发生在文件workbook.xml.rels的关键目标  设定printerSettings.bin。如果保存时,Excel其校正成在值vbaProject.bin



这种保护可以安装和删除工具如下:





第三种保护类型-隐藏模块,隐藏的VBA模块



删除时间:15到20分钟(例如,您需要OLE对象编辑器,Structured Storage Viewer。)



缺点:访问VBA模块代码



通常,与项目保护结合可以找到一种较不常见的保护类型是不可见的。安装此保护后,VBA模块不会显示在Excel工作簿项目中。您可以通过分析VBA代码(这需要花费时间!)或在OpenOffice或LibreOffice中打开Excel文件来了解其存在(  在保护Project时也可以观看代码)无法查看,但是此方法没有机会提供没有密码的工作文件)。 





LibreOffice中查看VBA代码 



简要介绍如何创建此保护



要创建此保护,您需要使用VBA项目-vbaProject.bin  printerSettings.bin编辑文件,具体取决于文件... \ xl \ _rels \ workbook.xml.rels的设置在文件末尾,删除以下行:Module1 = 32,32,635,330,Z具有所需的模块名称。





要删除此保护,您需要在vbaProject.bin文件中恢复已删除的模块记录。



可以使用以下工具设置此保护。





第四类保护-代码混淆



退出时间:未知,取决于代码的大小和部分代码的重用





混淆的VBA代码



缺点:混淆后需要测试文件的可操作性



一种非常罕见的保护类型,它基于将VBA源代码更改为人类无法读取的形式。删除所有注释,代码格式,重命名所有变量,过程,函数,模块和其他名称。攻击者将永远无法还原代码的原始形式,并且将花费大量时间将其还原为人类可读的形式。  



要对代码进行模糊处理,您需要时间,专门的软件。



可以使用以下工具设置此保护。





第五类保护-将代码移植到dll



删除时间:未知,取决于编程语言和资格



缺点:需要附加的dll文件



罕见的保护类型之一。主要思想是将主代码转移到用其他任何编程语言编写的单独的dll中。由于以下原因,这种保护类型并不广泛:需要Excel文件来“拖动”其他文件dll。



若要访问dll代码,您需要具有特殊的知识。



结论



最后,我要强调保护的无用性:  项目是不可见和隐藏的模块,从本质上讲,它什么也不保护。使您可以查看VBA代码,而无需在诸如OpenOffice    LibreOffice之类的程序中修改源文件因此,将它们删除没有任何问题。



All Articles