如何从从vbaProject.bin提取的十六进制流中读取VBA代码?

10
1个回答

10

我试图使用oletools恢复VBA代码,但并没有成功。不过,我使用了oledump,有一些成功的经验:

http://blog.didierstevens.com/programs/oledump-py/

对于处理受损工作簿,我发现oledump更适用。如果你想试试,可以下载oledump.py:

https://github.com/DidierStevens/DidierStevensSuite/raw/master/oledump.py

你还需要安装依赖模块“olefile”:

C:\temp>pip install olefile

接下来,使用7zip打开您的工作簿并提取“xl\vbaProject.bin”。 如果oledump无法读取vbaProject.bin,则还可以提取“xl\vbaProject.bin\VBA\”中存在的每个模块。

然后执行此命令以显示vbaProject.bin中的所有模块:

C:\temp>python oledump.py --vbadecompresscorrupt  C:\temp\vbaProject.bin

要显示来自模块的代码,请添加 -s 后跟模块号:

C:\temp>python oledump.py --vbadecompresscorrupt -s 3  C:\temp\vbaProject.bin

如果读取vbaProject.bin失败,请使用7zip提取目标模块,然后尝试直接读取:

C:\temp>python oledump.py -r -v --vbadecompresscorrupt C:\temp\Module1
C:\temp>python oledump.py -r -v --vbadecompresscorrupt C:\temp\ThisWorkbook

现在,如果你在这个时候还没有看到一行VBA代码,那么这段代码很可能是无法恢复的。


这个完美地解决了!@florentbr非常感谢你! - denfromufa
实际上,其中一个模块没有提取出来,尽管notepad.exe在随机字符之间显示了一些代码。 - denfromufa
1
该模块可能已经损坏,无法进行解压和恢复。更多信息请参考:http://www.wordarticles.com/Articles/Formats/StreamCompression.php - Florent B.
我注意到选项“-c”,它允许读取流的部分,也许这样仍然是可能的? - denfromufa
1
从我所看到的选项来看,可能不是这样。但要确定的唯一方法是查看代码并尝试在受损模块上使用不同的选项。 - Florent B.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接