设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

如何解除VBAProject 的口令保护

1970-1-1 08:00| 发布者: 打哈欠| 查看: 5993| 评论: 0

这篇文章是打哈欠针对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文件中
不连续存放。在采用简单覆盖方式时请注意不要覆盖错位置。

最新评论

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-3-29 21:30 , Processed in 0.065016 second(s), 16 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

返回顶部