数据库逆向工程(二)
字数 2097 2025-08-18 11:35:36
数据库逆向工程高级教程
1. 数据库逆向工程基础概念
1.1 数据库定义
数据库是一组二进制文件,用于存放结构化数据和相互之间的交叉引用。关键特征:
- 文件中的数据是结构化的
- 文件由具有相同格式的记录组成
- 通常包含多个表,不同表存放不同格式的记录
1.2 逆向工程目标
- 理解记录格式和文件格式
- 发现不同文件/表之间的交叉引用关系
- 重建数据库的完整架构
2. 文件格式逆向分析方法
2.1 确定表的数量
技术要点:
- 观察不同格式的相邻记录
- 寻找明显不同的数据模式
- 对于高熵二进制文件,通过字节模式的消失/出现来识别表切换
示例:
grpinc.dat文件包含2个表:
- 表1:4个彩色记录,每个记录大小0x3A字节
- 表2:纯文本记录,可能为单个大记录
2.2 确定记录大小
关键技术:
- 寻找重复出现的信息模式
- 计算两个相邻模式之间的间距
- 验证多个记录以确保一致性
示例分析:
catalogue文件记录大小确定:
- 第一个车辆名称偏移:0x0
- 第二个车辆名称偏移:0x800
- 记录大小=0x800-0x0=0x800字节
2.3 记录字段分析
步骤:
- 将记录划分为多个字段
- 根据数据类型(字符串、数字等)识别字段边界
- 通过跨记录比较验证假设
字段类型识别技巧:
- 字符串:可打印字符序列,可能有固定长度
- 数字:二进制表示的整数值
- 数组:相同类型元素的重复模式
2.4 使用Kaitai Struct描述格式
Kaitai Struct是一种用于描述二进制文件格式的声明性语言,可生成多种语言的解析代码。
示例格式描述:
meta:
id: catalogue
file-extension: dat
endian: le
encoding: ascii
seq:
- id: vehicle
type: vehicle
size: 0x800
repeat: eos
types:
vehicle:
seq:
- id: vehicle_name_1
type: str
size: 0x64
- id: vehicle_id
type: u2le
# 更多字段定义...
3. 交叉引用研究方法
3.1 两种基本方法
-
从已知到未知:
- 获取已知字段值(如vehicle_id)
- 在其他文件中搜索这些值
- 发现关联文件
-
从关键字到信息:
- 搜索特定关键字
- 找到包含关键字的文件
- 逆向分析这些文件并发现与已知文件的关联
3.2 文件访问监控技术
使用Process Monitor(ProcMon)监控程序的文件访问行为:
-
设置过滤器:
- 进程名称(如ntvdm.exe)
- 操作类型(如ReadFile)
-
关键监控数据:
- 访问的文件列表
- 读取操作的块偏移量
- 读取的块大小
- 块的读取顺序
-
分析技巧:
- 块偏移和大小可揭示记录结构和表边界
- 读取顺序可揭示程序算法(如二进制搜索)
3.3 实际应用示例
研究车辆到零件的关系路径:
- 车辆 → 第一级部件树
- 第一级部件树 → 第二级部件树
- 第二级部件树 → 零件列表
通过监控发现的关键文件:
- MCData.idx:绑定车辆ID与部件树级别
- MCData.dat:包含零件列表
- MCImage.dat/MCImage2.dat:零件图
4. 数据库逆向工程方法论
4.1 核心方法清单
基本方法
[2.1] 将使用DB的程序视为DBMS
初步分析
[2.2] 对待处理的数据和代码进行初步分析,搜索关键字获取更多信息
[2.3] 审查程序模块,查找可重用代码
[2.4] 代码重用的复杂性与黑盒子数量成正比,与执行动作数量成反比
研究入口点
[2.5] 选择离初始入口点近的数据库入口点
[2.6] 考察代表数据库入口点的文件
[2.7] 研究并描述入口点文件格式
研究交叉引用
[2.8] 监控程序加载感兴趣数据时的文件访问
[2.9] 利用监控获得的块偏移、大小和顺序研究文件
4.2 实用技巧总结
- 模式识别:寻找重复的数据模式来确定记录结构和大小
- 假设验证:对字段边界和类型的假设需要在多个记录中验证
- 工具使用:
- 十六进制编辑器查看原始数据
- Kaitai Struct描述和可视化文件格式
- ProcMon监控文件访问模式
- 渐进分析:从简单明显的结构开始,逐步深入复杂部分
- 文档记录:及时记录发现和假设,便于回溯和验证
5. 高级主题与挑战
5.1 复杂情况处理
- 高熵数据:当字节模式不明显时,需要更精细的分析技术
- 加密数据:识别加密算法和密钥是首要任务
- 压缩数据:需要识别压缩算法并解压后分析
5.2 性能考量
- 大文件处理:需要分段分析,避免一次性加载
- 高效搜索:建立索引或使用专用工具加速模式搜索
5.3 架构重建
最终目标是将逆向工程结果转化为数据库架构图,包括:
- 所有相关文件及其用途
- 文件内部的表结构
- 表之间的关系和交叉引用
6. 参考资料与工具推荐
6.1 推荐阅读
- DGTEFF - XentaxWiki
- "How to crack a Binary File Format"
- "BFF: A grammar for Binary File Formats"
- "File format reverse engineering, an introduction"
- "Reverse Engineering/File Formats" (Wikibooks)
- "Reverse engineering visual novels 101"系列文章
6.2 实用工具
- Kaitai Struct:文件格式描述语言和可视化工具
- ksv:Kaitai Struct可视化工具
- Process Monitor:监控文件、注册表等系统活动
- 十六进制编辑器:如HxD、010 Editor等
- 自定义工具:根据需要编写脚本处理特定格式
通过系统应用这些方法和工具,可以有效逆向工程各种专有数据库格式,理解其内部结构和关系。