数据库逆向工程(一)
字数 1923 2025-08-18 11:35:32

数据库逆向工程教学文档

第一部分:基础概念与简介

1.1 数据库逆向工程概述

数据库逆向工程是从专有文件格式和数据库中重建未知数据结构并确定它们之间依赖关系的过程。与传统的代码逆向工程不同,它关注的是"代码所处理的数据是如何组织的"。

1.2 关键术语定义

  • 文件:根据某些规则组织在一起的数据
  • 文件格式:文件中数据的组织规则
  • 二进制文件:存放原始字节和/或人类可读信息的文件
  • 数据库:一组存放结构化数据并且彼此交叉引用的二进制文件

1.3 抽象层次

  1. 文件格式层次:研究单个文件的数据组织规则
  2. 数据库层次:研究一组相互关联的文件及其交叉引用关系

1.4 数据库逆向分析的目标

重建未知数据结构并确定它们之间的依赖关系,为后续的ETL(抽取、转换、加载)过程奠定基础。

第二部分:主要逆向分析方法

2.1 基本方法论

核心原则:

  • 将使用数据库的程序视为DBMS
  • 通过重现DBMS的操作来理解数据库内部机制

逆向工程四步法:

  1. GUI概览
  2. 数据文件审查
  3. 代码文件审查
  4. 查找可重用代码

2.2 初步分析技术

  1. 文件扩展名分析:不要仅依赖扩展名判断文件类型
  2. 十六进制编辑器使用:从文本模式开始,必要时切换到十六进制模式
  3. 互联网搜索:对审查期间找到的关键字进行深入搜索

2.3 代码重用技术

  1. 审查程序模块导出:查找与数据库操作相关的函数
  2. 评估重用价值
    • 函数数量与功能复杂度的权衡
    • 优先使用执行大量工作的函数
  3. 注意事项
    • 黑盒子越多,重用越复杂
    • 函数功能越集中,重用价值越高

2.4 入口点选择策略

  1. 选择标准
    • 结构不依赖于其他结构
    • 能帮助调查其他结构
  2. 两种路径
    • 直接从所需点开始(适合有经验者)
    • 从依赖树根节点开始(更稳妥)
  3. 探测方法
    • 选择能刻画目标数据的关键字
    • 在全文件中搜索这些关键字
    • 注意不同编码和非标准存储形式

第三部分:实战案例分析

3.1 Microcat Ford USA数据库分析

文件结构:

C:\MCFNA
├── 可执行文件(.EXE, .DLL, .VBX)
└── DMS等子目录

C:\FNA_DATA
├── 数据文件(.dat, .idx, .xcd)
└── 多个子目录

文件类型发现:

  • .dat文件:结构和内容各异(文本/二进制)
  • .idx文件:可能是索引文件
  • .xcd文件:实际为ZIP压缩存档

3.2 逆向工程过程

  1. GUI分析:确定程序主要功能(车辆选择、零件显示等)
  2. 数据文件审查
    • avsmodel.dat:文本格式
    • FNAc.dat:文本格式,包含车辆名称
    • MCData.dat:二进制格式
    • MCImage.dat:二进制格式
  3. 代码分析
    • 16位Windows NE格式可执行文件
    • 使用Visual Basic 3.0编写
    • 部分文件使用Shrinker加壳
  4. 代码重用
    • 在FNAUTIL2.DLL中发现数据库相关导出函数
    • 包含CODESTR, DMC等数据库术语

3.3 入口点确定

  1. 选择依据:车辆信息是程序启动时显示的首要数据
  2. 关键字搜索:使用"Bob Cat ML 1980"等车辆信息作为关键字
  3. 定位文件:在FNAc.dat中找到车辆名称列表,确定为目录文件

第四部分:高级技术与注意事项

4.1 文件格式逆向技巧

  1. 常见模式识别
    • 长度前缀字符串
    • 固定长度字段
    • 终止符标记列表结束
  2. 交叉引用分析
    • ID引用(如专辑ID引用图片ID)
    • 指针引用

4.2 数据库架构重建

  1. 示例数据结构
    • Band.dat1:乐队信息,包含专辑和照片ID列表
    • Album.dat2:专辑信息,包含封面ID
    • Image.dat3:图片数据,独立结构
  2. 依赖关系映射:创建文件间的引用关系图

4.3 工具推荐

  1. 十六进制编辑器:Hiew, 010 Editor
  2. 文件格式分析工具:Kaitai Struct(声明式二进制格式描述)
  3. PE分析工具:DiE (Detect It Easy)
  4. 字符串搜索工具:Total Commander(支持多编码搜索)

4.4 常见挑战与解决方案

  1. 专有压缩格式:通过调试或文档研究解压算法
  2. 加密数据:分析程序解密例程
  3. 复杂依赖关系:从简单结构开始逐步构建理解
  4. 缺乏文档:通过反复测试验证假设

第五部分:总结与最佳实践

5.1 数据库逆向工程流程总结

  1. 确定逆向目标
  2. 进行初步分析(GUI、文件、代码)
  3. 查找可重用代码
  4. 选择合适的入口点
  5. 逐步解析数据结构和依赖关系
  6. 验证理解并迭代优化

5.2 最佳实践

  1. 文档记录:详细记录发现的数据结构和假设
  2. 增量验证:通过小规模测试验证每个假设
  3. 工具辅助:利用脚本自动化重复分析任务
  4. 模式识别:注意常见的数据组织模式
  5. 耐心坚持:复杂数据库可能需要长时间分析

5.3 后续研究方向

  1. 数据库转换与迁移技术
  2. 专有数据库与标准格式的互操作
  3. 自动化逆向工程工具开发
  4. 特定领域数据库的专门逆向技术
数据库逆向工程教学文档 第一部分:基础概念与简介 1.1 数据库逆向工程概述 数据库逆向工程是从专有文件格式和数据库中重建未知数据结构并确定它们之间依赖关系的过程。与传统的代码逆向工程不同,它关注的是"代码所处理的数据是如何组织的"。 1.2 关键术语定义 文件 :根据某些规则组织在一起的数据 文件格式 :文件中数据的组织规则 二进制文件 :存放原始字节和/或人类可读信息的文件 数据库 :一组存放结构化数据并且彼此交叉引用的二进制文件 1.3 抽象层次 文件格式层次 :研究单个文件的数据组织规则 数据库层次 :研究一组相互关联的文件及其交叉引用关系 1.4 数据库逆向分析的目标 重建未知数据结构并确定它们之间的依赖关系,为后续的ETL(抽取、转换、加载)过程奠定基础。 第二部分:主要逆向分析方法 2.1 基本方法论 核心原则: 将使用数据库的程序视为DBMS 通过重现DBMS的操作来理解数据库内部机制 逆向工程四步法: GUI概览 数据文件审查 代码文件审查 查找可重用代码 2.2 初步分析技术 文件扩展名分析 :不要仅依赖扩展名判断文件类型 十六进制编辑器使用 :从文本模式开始,必要时切换到十六进制模式 互联网搜索 :对审查期间找到的关键字进行深入搜索 2.3 代码重用技术 审查程序模块导出 :查找与数据库操作相关的函数 评估重用价值 : 函数数量与功能复杂度的权衡 优先使用执行大量工作的函数 注意事项 : 黑盒子越多,重用越复杂 函数功能越集中,重用价值越高 2.4 入口点选择策略 选择标准 : 结构不依赖于其他结构 能帮助调查其他结构 两种路径 : 直接从所需点开始(适合有经验者) 从依赖树根节点开始(更稳妥) 探测方法 : 选择能刻画目标数据的关键字 在全文件中搜索这些关键字 注意不同编码和非标准存储形式 第三部分:实战案例分析 3.1 Microcat Ford USA数据库分析 文件结构: 文件类型发现: .dat文件:结构和内容各异(文本/二进制) .idx文件:可能是索引文件 .xcd文件:实际为ZIP压缩存档 3.2 逆向工程过程 GUI分析 :确定程序主要功能(车辆选择、零件显示等) 数据文件审查 : avsmodel.dat:文本格式 FNAc.dat:文本格式,包含车辆名称 MCData.dat:二进制格式 MCImage.dat:二进制格式 代码分析 : 16位Windows NE格式可执行文件 使用Visual Basic 3.0编写 部分文件使用Shrinker加壳 代码重用 : 在FNAUTIL2.DLL中发现数据库相关导出函数 包含CODESTR, DMC等数据库术语 3.3 入口点确定 选择依据 :车辆信息是程序启动时显示的首要数据 关键字搜索 :使用"Bob Cat ML 1980"等车辆信息作为关键字 定位文件 :在FNAc.dat中找到车辆名称列表,确定为目录文件 第四部分:高级技术与注意事项 4.1 文件格式逆向技巧 常见模式识别 : 长度前缀字符串 固定长度字段 终止符标记列表结束 交叉引用分析 : ID引用(如专辑ID引用图片ID) 指针引用 4.2 数据库架构重建 示例数据结构 : Band.dat1:乐队信息,包含专辑和照片ID列表 Album.dat2:专辑信息,包含封面ID Image.dat3:图片数据,独立结构 依赖关系映射 :创建文件间的引用关系图 4.3 工具推荐 十六进制编辑器 :Hiew, 010 Editor 文件格式分析工具 :Kaitai Struct(声明式二进制格式描述) PE分析工具 :DiE (Detect It Easy) 字符串搜索工具 :Total Commander(支持多编码搜索) 4.4 常见挑战与解决方案 专有压缩格式 :通过调试或文档研究解压算法 加密数据 :分析程序解密例程 复杂依赖关系 :从简单结构开始逐步构建理解 缺乏文档 :通过反复测试验证假设 第五部分:总结与最佳实践 5.1 数据库逆向工程流程总结 确定逆向目标 进行初步分析(GUI、文件、代码) 查找可重用代码 选择合适的入口点 逐步解析数据结构和依赖关系 验证理解并迭代优化 5.2 最佳实践 文档记录 :详细记录发现的数据结构和假设 增量验证 :通过小规模测试验证每个假设 工具辅助 :利用脚本自动化重复分析任务 模式识别 :注意常见的数据组织模式 耐心坚持 :复杂数据库可能需要长时间分析 5.3 后续研究方向 数据库转换与迁移技术 专有数据库与标准格式的互操作 自动化逆向工程工具开发 特定领域数据库的专门逆向技术