开启了宏命令的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
结构
确认模块位置-以Module或模块开头的编号。
查看模块代码内容: