这篇文章是打哈欠针对Excel所写的一篇文件结构分析文章,但一样适用于Access。
(以下方法仅提供为学习使用,请不要滥用,破坏 VBA 编程人员的工作成果。请大家请所能购买正版) 注意: 本文所载全部、部分内容不得转载、商业使用,作者保留所有法律权利。 所描述方法不保证不对 office 文件、系统造成损害。作者不对使用者行为及行为后果承担法律责任。
假定: 1、你会使用UltraEdit32或其它二进制编辑工具 2、你理解二进制、十进制、十六进制的概念
Excel 中的_VBA_Project_CUR storage(我们可以理解为一个目录) 下的Project Stream(可以理解为一个文件)是一个纯文本文件。如下例所示意,是一个包含了一个工作表(Worksheet)、一个模块(Moudle)的Project stream。
其表达式为:
命令符=串 ... [小节] 命令符=串
每行间用 &h0d、&h0a (回车、换行)分隔。所以,这就为我们简单地破解提供了条件。
'******************************************** '*** 带有 VBA 的Excel,没有口令保护 *** '******************************************** ID="{87EEB809-E9F0-11D6-95A2-008888998168}" Document=ThisWorkbook/&H00000000 Document=Sheet1/&H00000000 Module=模块1 Name="VBAProject" HelpContextID="0" VersionCompatible32="393222000" CMG="DBD91940F044F044F044F044" DPB="B6B474AD94536E546E546E" GC="91935354545454AB"
[Host Extender Info] &H00000001={3832D640-CF90-11CF-8E43-00A0C911005A};VBE;&H00000000
[Workspace] ThisWorkbook=0, 0, 0, 0, C Sheet1=0, 0, 0, 0, C 模块1=22, 22, 155, 343, Z
下例是同一个文件,增加了口令保护的project stream。请注意看 ID、CMG、DPB以及GC串。 '******************************************** '*** 带有 VBA 的Excel,有口令保护 *** '******************************************** ID="{00000000-0000-0000-0000-000000000000}" Document=ThisWorkbook/&H00000000 Document=Sheet1/&H00000000 Module=模块1 HelpFile="" Name="VBAProject" HelpContextID="0" VersionCompatible32="393222000" CMG="B1B31D5B215B215F255F25" DPB="6260CEBD62DA62DA9D2663DAB338442F98229B892DDBD831C3AC5373F78FF8D2FB2E1F1B3B" GC="1614BA74DA9C8F9D8F9D8F"
[Host Extender Info] &H00000001={3832D640-CF90-11CF-8E43-00A0C911005A};VBE;&H00000000
[Workspace] ThisWorkbook=0, 0, 0, 0, C Sheet1=0, 0, 0, 0, C 模块1=22, 22, 155, 343, Z
当ID或DPB中的内容被更改时,就出现所谓的“工程不可视”状态。
而破解的方法也就很简单: 1、简单覆盖 将ID、CMG、DPB以及GC串(包括 命令符=串 ),覆盖为 &h0d、&h0a(注意:请成对使用),如果出现单字节空余,用&h20(空格)覆盖。
如: 00000000h: 49 44 3D 22 7B 38 37 45 45 42 38 30 39 2D 45 39 ; ID="{ 87EEB809- E9 00000010h: 46 30 2D 31 31 44 36 2D 39 35 41 32 2D 30 30 38 ; F0- 11D6- 95A2- 008 00000020h: 38 38 38 39 39 38 31 36 38 7D 22 0D 0A 44 6F 63 ; 888998168}".. Doc
替换为: 00000000h: 0D 0A 0D 0A 0D 0A 0D 0A 0D 0A 0D 0A 0D 0A 0D 0A ; .................. 00000010h: 0D 0A 0D 0A 0D 0A 0D 0A 0D 0A 0D 0A 0D 0A 0D 0A ; ................... 00000020h: 0D 0A 0D 0A 0D 0A 0D 0A 0D 0A 20 0D 0A 44 6F 63 ; .......... .. Doc
2、其他方法 本文不再提供。
注意事项: 1、Excel 中的 Stream 采用laola 文件系统存放(请参考拙作《Excel 二进制文件结构分析》),因而stream 内容可能不连续存放。 例如,project stream 按小文件块方式存放时,每 64 字节(Laola Header 偏移&h20 定义)为一个块,相临的块在Excel文件中 不连续存放。在采用简单覆盖方式时请注意不要覆盖错位置。
|