Excel VBA代码找回

开启了宏命令的Excel一不小心就会出现莫名奇妙的问题,轻则VBA代码丢失,重则工作薄损坏,无法打开或保存。确实很恶心。

在中文语言的Excel中新建了宏,在英文语言的Excel中很有可能就打不开了,甚至中文Excel保存后再次打开也会提示文件损坏,辛辛苦苦写的VBA代码就那样没了。

修复是不可能真正修复的,顶多就删除vbaProject.bin这样子,那么写的VBA代码就直接放弃了吗?显然不应该。

xlsx/xlsb实际上是一个压缩包文件,将其后缀改为zip解压,获得大致如下的目录结构。vbaProject.bin就存储了VBA工程文件,包括VBA代码。vbaProject.bin实际上也是一个压缩文件,还可以再解压,但是不能使用常规方式提取出代码。

这篇文章说明了office三件套的文件格式实际是ole文件(oledump.py | Didier Stevens

DESKTOP-K65CV8V :: Users/Desktop/book % tree -L 3
.
├── [Content_Types].xml
├── _rels
├── customXml
│   ├── _rels
│   │   └── item1.xml.rels
│   ├── item1.xml
│   └── itemProps1.xml
├── docProps
│   ├── app.xml
│   └── core.xml
└── xl
    ├── _rels
    │   └── workbook.bin.rels
    ├── calcChain.bin
    ├── connections.bin
    ├── metadata.bin
    ├── printerSettings
    │   └── printerSettings1.bin
    ├── queryTables
    │   └── queryTable1.bin
    ├── sharedStrings.bin
    ├── styles.bin
    ├── tables
    │   ├── _rels
    │   ├── table1.bin
    │   ├── table2.bin
    │   └── table3.bin
    ├── theme
    │   └── theme1.xml
    ├── vbaProject.bin
    ├── workbook.bin
    └── worksheets
        ├── _rels
        ├── binaryIndex1.bin
        ├── binaryIndex2.bin
        ├── binaryIndex3.bin
        ├── sheet1.bin
        ├── sheet2.bin
        └── sheet3.bin

借助该文提供的oledump.py(oledump.py | Didier Stevens)可对ole文件进行分析。

以下简单介绍利用oledump.py提取VBA代码的用法。

1、查看vbaProject.bin结构

image-20211118222429078

确认模块位置-以Module或模块开头的编号。

查看模块代码内容:

image-20211118222621902