简介
oldump.py是一个分析OLE文件(复合文件二进制格式)的程序。这些文件包含数据流。许多应用程序使用这种文件格式,最著名的是微软 Office..doc,.xls,.ppt,.msi等文件(docx, xlsx等是新的文件格式,即ZIP内的XML)。该工具可以用来分析恶意OLE文件中的恶意代码。
使用说明
该工具需要安装olefile模块:
pip install olefile
oledump有一个内嵌的手册页,运行oledump.py -m即可查看。运行oledump.py -h即可获取帮助信息:
用法:oledump.py[选项][文件]
分析OLE文件(复合二进制文件)
选项:
--version 显示程序的版本号并退出
-h, --help 显示此帮助消息并退出
-m, --man 打印手册
-s SELECT, --select=选择
选择要转储的项目编号(a表示全部)
-d, --dump 执行转储
-x, --hexdump 执行十六进制转储
-a, --asciidump 执行ascii转储
-A, --asciidumprle 使用RLE执行ascii转储
-S, --strings 执行字符串转储
-T, --headtail 显示头和尾
-v, --vbadecompress VBA解压缩
--vbadecompressskipattributes
VBA解压缩,跳过初始属性
--vbadecompresscorrupt
VBA解压缩,如果损坏则显示开始
-r, --raw 读取原始文件(与选项-v或-p一起使用)
-t TRANSLATE, --translate=转换
字符串转换, 如 utf16 或 .decode("utf8")
-e, --extract 提取OLE嵌入文件
-i, --info 打印所选项目的额外信息
-p PLUGINS, --plugins=插件
要加载的插件(用逗号分隔插件;@支持文件)
--pluginoptions=插件选项
插件的选项
--plugindir=插件目录
插件的目录
-q, --quiet 仅打印插件的输出
-y YARA, --yara=YARA YARA规则文件、@file、目录或#规则流(YARA搜索不适用于-s选项)
-D DECODERS, --decoders=解码器
要加载的解码器(使用逗号分隔解码器;@支持文件)
--decoderoptions=解码器选项
解码器的选项
--decoderdir=解码器目录
解码器的目录
--yarastrings 打印YARA字符串
-M, --metadata 打印元数据
-c, --calc 将额外计算的数据添加到输出中,如hashes
--decompress 在流中搜索压缩数据并解压缩
-V, --verbose 详细输出解码器错误和YARA规则
-C CUT, --cut=CUT 切割数据
-E EXTRA, --extra=EXTRA
添加额外信息(环境变量:OLEDUMP_extra)
--storages 在报告中包含storages
-f FIND, --find=FIND 查找D0CF11E0 MAGIC序列(使用l列出,用于选择的数字)
-j, --jsonoutput 生成json输出
-u, --unuseddata 包括流结束后的未使用数据
--password=PASSWORD 要使用的ZIP密码(默认 infected)
对电子表格(.xls二进制格式)运行oledump会列出所有在OLE文件中找到的流(OLE文件是一个虚拟文件系统使用文件夹和文件,称为流),如下所示:
C:\Demo>oledump.py Book1.xls
1: 4096 '\x05DocumentSummaryInformation'
2: 4096 '\x05SummaryInformation'
3: 4096 'Workbook'
第一列是由oledump分配给流的索引,用于选择流。第二列是流的大小(流中的字节数),最后一列是流的名称。要选择需要分析的流,选择-s选项并指定索引(a表示所有流),如下所示:
C:\Demo>oledump.py -s 1 Book1.xls
00000000: FE FF 00 00 05 01 02 00 00 00 00 00 00 00 00 00
................
00000010: 00 00 00 00 00 00 00 00 01 00 00 00 02 D5 CD D5
.............i-i
00000020: 9C 2E 1B 10 93 97 08 00 2B 2C F9 AE 30 00 00 00
........+,..0...
00000030: E4 00 00 00 09 00 00 00 01 00 00 00 50 00 00 00
............P...
00000040: 0F 00 00 00 58 00 00 00 17 00 00 00 70 00 00 00
....X.......p...
...
选择流时,其内容默认显示为ASCII转储(即-a选项)。选项-x生成十六进制转储,而不是ASCII转储。
C:\Demo>oledump.py -s 1 -x Book1.xls
FE FF 00 00 05 01 02 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 01 00 00 00 02 D5 CD D5
9C 2E 1B 10 93 97 08 00 2B 2C F9 AE 30 00 00 00
E4 00 00 00 09 00 00 00 01 00 00 00 50 00 00 00
0F 00 00 00 58 00 00 00 17 00 00 00 70 00 00 00
...
选项-d生成流内容的原始转储。该内容可以重定向到一个文件,如下所示:
C:\Demo>oledump.py -s 1 -d Book1.xls > content.bin
或者它可以通过管道传输到另一个命令中
C:\Demo>oledump.py -s 1 -d Book1.xls | pdfid.py -f
如果原始转储需要由字符串编解码器(如utf16)处理,使用选项-t代替-d,并提供编解码器:
C:\Demo>oledump.py -s 1 -t utf16 Book1.xls
流也可以通过全名进行选择(例如:-s “VBA/本工作手册”)。
选项-C(--cut)允许对流进行部分选择。使用这个选项可以切割流的一部分。这个参数由两个terms组成,用冒号(:)分隔,如termA:termB。termA和termB可以是:
- nothing(一个空字符串)
- 一个正十进制数;如:10
- 十六进制数字(前面加0x);如:0x10
- 要搜索的区分大小写的ASCII字符串(用方括号和单引号);如:['MZ']
- 要搜索的区分大小写的UNICODE字符串(由方括号和以u为前缀的单引号);如:[u'User']
- 要搜索的十六进制字符串(用方括号括起来);如:[d0cf11e0]
如果termA为空,则从位置0处的字节开始切割。如果termA是一个数字,则代表为位置,从给定的数字处开始切割。如果termA是要搜索的字符串,则从第一个找到字符串的位置处开始切割,如果找不到字符串,则切割部分为空(0字节)。
如果termB为空,则字节的切割部分以最后一个字节结束。如果termB是一个数字,那么字节的切割部分以给定数字处结束。当termB是一个数字时,它可以有后缀字母l。这表明数字是一个长度(字节数),而不是一个位置。termB也可以是负数(十进制或六进制):-5表示选择除最后5个字节之外的完整文件。如果termB是要搜索的字符串,则以字符串为切割部分的结尾。如果找不到字符串,切割为空(0字节)。
简单使用
在一个.xls文件上运行oledump,它会显示数据流:
流 7、8和 15 旁边的字母 M 表示该流包含 VBA 宏。VBA 宏的源代码在存储在流中时会被压缩。使用选项 -v 解压缩 VBA 宏,可以看到宏代码:
更多用法参考:
https://blog.didierstevens.com/programs/oledump-py/
Comments | NOTHING