有哪些工具可以从平面二进制文件中挖掘数据结构?

逆向工程 拆卸 工具 静态分析
2021-06-28 01:55:16

问题陈述

我有一个完全由数据结构组成的文件;我一直在寻找一种工具,可以让我打开这个文件,并声明(也许)一个类型和偏移量,这样我就可以单独使用假定的原始数据类型。

例如,我将位于偏移量 0x04 处的 4 个字节声明为一个 32 位无符号整数,并希望检查该位置的值(可能读取为大端序),然后单独使用该整数(也许看看它的样子像编码为 4 字节的 ascii 字符串并尝试读取它等)

规格

我有一个 4096 字节的文件,其中包含 C 结构,成员元素为长度为 16-64 位的整数;下面是一个例子:

struct my_struct {
uint_32 magic
} // sizeof(my_struct) == 0x04

在这种情况下,magic = 'ball',所以当文件在文本编辑器中打开时,它读作 'llab...',显然也可以表示为 32 位整数

问题

是否有工具可以对平面数据结构文件进行静态分析?

到目前为止我认为的解决方案

我曾考虑用 Python 编写一个命令行工具来执行此操作,但如果已经存在某些东西,我更愿意节省时间,也许可以通过使用由更有经验的人设计的工具来了解有关此主题的更多信息。如果在您看来我对此的处理有误(这是我对这种倒车的第一次认真探索),请指导我的理解,谢谢。

我已经研究过的地方

谷歌搜索“逆向工程工具”并浏览链接

检查维基百科的逆向工程页面

尝试了一些基本原理推理

检查pypi

结果

有三个完全有效和正确的答案,但我已将其中最详细和最便宜的标记为正确答案,因为它是审查此问题的社区成员最容易获得的。

4个回答

010 Editor 的二进制模板功能非常适合此类工作。它不仅支持静态struct定义,还允许动态调整大小的struct字段并支持强大的脚本语言。

示例模板

编辑模板结果

为此,我使用Hex Workshop它有许多有用的平面文件反转功能,但我最喜欢的是它允许您以 C 样式语法声明结构并将它们加载到文件顶部。它不是免费的,但它的价值超过了 90 美元的价格标签。

我觉得最有用的功能:

  • C 风格的结构体语法,支持各种数组、字符串类型、位串、有效性检查等。
  • 可定制的数据检查器(如果您只想查看几种类型的数据,则很有用)
  • 差异化
  • 偏移显示(显示地址偏移、选择大小等)
  • 序列突出显示(如查找时“突出显示全部”)
  • 按位运算、校验和等。

IDA 可用于处理纯数据文件。您可以将字节转换为数据项(字节/字/dwords/qwords/floats/strings 等),将它们分组为结构或数组(或结构数组),将整数表示为偏移量,添加名称和注释等。

以下是 IDA 中表示的一些随机 BMP 文件的示例:

0000 BmHeader     db 'BM'     ; Signature
0002              dd 146h     ; Size
0006              dw 0
0008              dw 0
000A              dd offset pixel_array ; offset to image data
000E ; DIB header
000E              dd 40       ; size of this header
0012              dd 33       ; bitmap width
0016              dd 33       ; bitmap height
001A              dw 1        ; number of color planes
001C              dw 1        ; bits per pixel
001E              dd 0        ; compression: none
0022              dd 108h     ; size of image data
0026              dd 4724     ; horizontal resolution (pixels per meter)
002A              dd 4724     ; vertical resolution (pixels per meter)
002E              dd 0        ; colors in the palette
0032              dd 0        ; number of important colors
0036 ; Color table
0036              dd 0, 0FFFFFFh
003E ; pixel data
003E pixel_array  db 1, 73h, 13h, 6, 80h, 3 dup(0), 7Dh, 4Bh, 0E0h, 56h

六合器

  • 具有与 010 Editor 的二进制模板类似的功能,称为“语法”。它允许插入数字、字符串、结构和二进制 blob。如果这还不够,它还有 Python 和 Lua 的脚本功能

  • 然后可以很好地编辑这些值(例如,十进制而不是十六进制)。十六进制区域可以突出显示。

缺点:

在撰写本文时,似乎存在多个打开语法 + 一个打开文件的问题。当为同一个语法打开第二个文件时,它崩溃了。尽早储蓄并经常储蓄。

部分分析文件的屏幕截图:

截屏