我被要求更新一些Excel 2003宏,但是VBA项目有密码保护,而且似乎缺乏文档…没人知道密码。

是否有一种方法可以删除或破解VBA项目的密码?


当前回答

万一你的街区 没有发生= \ r \ nDPB“XXXX”=“XXXXX”\ r \ nGC =“XXXXXX” 如果您的“已知密码”文件比“未知密码”文件中的现有块短,请用后面的零填充十六进制字符串以达到正确的长度。

e.g.

CMG=“xxxxxx”\r\nDPB=“xxxxx”\r\nGC=“xxxxx”

在未知密码文件中,应设置为

CMG="XXXX00"\r\nDPB="XXXXX000"\r\nGC="XXXXXX0000"保留文件长度。

我在office 2007中也使用过。xla(97/2003格式)文件。

其他回答

ElcomSoft提供高级办公密码破断器和高级办公密码恢复产品,只要文档是在Office 2007或更早版本中创建的,就可以适用于这种情况。

你试过在OpenOffice.org中打开它们吗?

前段时间我遇到了类似的问题,发现Excel和Calc不能理解彼此的加密,因此允许直接访问几乎所有内容。

这是一段时间以前,所以如果这不仅仅是我的侥幸,它也可能已经被修补。

事实上,大多数启用宏的Office文档的代码文件都没有加密,密码只会阻止使用Office程序打开项目。 这意味着,正如其他答案所建议的那样,您通常可以使用Office替代品来访问和编辑该文件。

但是,如果你只是需要访问代码,你可以使用oldump .py这样的工具来提取宏代码。这对于恶意软件分析非常有用,还可以从文件中获取大部分代码,这样如果忘记密码,就不必从头开始了。

此外,许多excel文件在打开时动态设置密码。这意味着如果您可以阅读代码,您通常可以找到明文密码或消除混淆。

oledump.py例子:

列出一个办公文档中的所有“流”(嵌入式二进制文件或代码文件):

python oledump.py -v yourExcelFile.xlsm

输出:

A: xl/vbaProject.bin
 A1:      2000 'PROJECT'
 A2:      1500 'PROJECTwm'
 A3: M    1224 'VBA/Module1'
 A4: M   18694 'VBA/Module2'
 A5: M   11877 'VBA/Module3'
...

旁边带M的流是宏,这是未加密的VBA代码

提取流

python oledump.py -s A3 -v yourExcelFile.xlsm > Module1.vba

这将把A3流中包含的代码输出到Module1.vba。

我通常将此与循环结合起来,将所有文件解压缩到一个文件夹中。这个快速的PowerShell脚本将提取大多数文件中的所有流:

New-Item -ItemType Directory "Output"

# just hardcode the highest stream outputted by oledump.py -v
$max = 5 
for ($i = 1; $i -le $max; $i++) {
    python oledump.py -s "A$i" -v yourExcelFile.xlsm > ".\Output\A$i"
}

注意,这将只提取人类可读的文件。

保护是Excel中的一个简单的文本比较。 在你最喜欢的调试器中加载Excel (Ollydbg是我选择的工具),找到进行比较的代码并将其修复为总是返回true,这应该可以让你访问宏。

对于Windows 10机器上的Excel 2016 64位,我使用了十六进制编辑器来更改受保护的xla的密码(尚未对任何其他扩展进行测试)。 提示:在执行此操作之前创建备份。

我采取的步骤:

在十六进制编辑器中打开vba(例如XVI) 搜索这个DPB 将DPB更改为其他内容,如DPX 保存它! 重新打开.xla,将出现一条错误消息,继续。 您现在可以通过打开属性并转到password选项卡来更改.xla的密码。

我希望这对你们中的一些人有所帮助!