Giovanni-Del-Bianco/Advanced-FAT32-Forensics

GitHub: Giovanni-Del-Bianco/Advanced-FAT32-Forensics

一个通过编写 Python 脚本手动解析原始十六进制数据,从 FAT32 磁盘镜像中定位并恢复已删除文件的底层数字取证实战项目。

Stars: 0 | Forks: 0

# 底层数字取证:FAT32 手动数据恢复 | 信息 | 详情 | | :--- | :--- | | **👤 作者** | **Giovanni Del Bianco** | | **💻 语言** | **Python 3** (自定义 Hex 解析器) | | **🛠️ 技术** | **十六进制分析**, **字节级 Struct 解包**, **内存偏移量计算** | | **🧠 核心概念** | **小端序架构**, **LBA (逻辑块寻址)**, **MBR 与引导扇区**, **FAT32 目录项**, **文件雕刻与 `0xE5` 删除标记**。 | | **🎯 目标** | 分析原始 USB 驱动器镜像 (`.vhd`),计算精确的扇区偏移量以完全手动浏览 FAT32 文件系统,定位根目录,识别 `0xE5` 删除标记,并提取隐藏已删除文件的物理簇。 | ## 🚨 场景:任务简报 ### 1. 证据 在这个数字取证实验室中,我们的任务是分析一个名为 `FAT32.vhd` 的原始磁盘镜像。该文件是据称由一名卧底特工使用的 USB 驱动器的逐位副本。 乍一看,挂载该驱动器显示出一个看似正常的文件系统,其中充满了随机的良性数据(照片、通用文件夹)。然而,情报表明,一份关键的秘密指令被故意从驱动器中**删除**,以防止被发现。 ### 2. 挑战:反取证与手动分析 虽然自动化取证套件(例如 Autopsy、EnCase、FTK)通常可以通过单击恢复已删除的文件,但完全依赖这些工具是安全分析师的一个关键弱点。威胁行为者经常采用*反取证*技术——例如故意破坏分区表或 malformed(畸形化)目录项——来崩溃或欺骗自动化解析器。 * **目标:** 我们必须充任底层取证调查员。我们的目标是通过读取磁盘镜像的原始十六进制字节,**手动重建文件系统层次结构**,完全绕过操作系统。 * **约束:** 我们不能依赖预构建的解析库。我们必须编写自定义 Python 脚本来解释原始二进制数据,计算我们自己的内存偏移量,并直接从物理簇中手动提取已删除文件的内容。 ### 3. 文件删除的威胁模型 为了成功,我们必须了解 FAT32 文件系统的基本架构。当用户“删除”文件或清空回收站时,操作系统**不会擦除磁盘上的物理数据(即 1 和 0)**。 相反,它执行两个快速操作: 1. **`0xE5` 标记:** 它将目录表中文件名的第一个字节更改为 `0xE5` (Hex)。这是一个告诉操作系统的标志:“此文件已删除,向用户隐藏它。” 2. **FAT 清理:** 它更新文件分配表 (FAT),将保存文件数据的簇标记为 `0x00000000`(“空闲,可被覆盖”)。 只要新数据尚未保存到这些特定簇上,原始文件内容就保持完全完整,并且任何确切知道在哪里查看的人都可以读取。 ## 🧠 工程方法:底层取证流水线 ### “精确提取,而非自动雕刻” 关于数据恢复的一个常见误解是,它仅仅涉及扫描整个驱动器以查找已知的文件签名(例如,搜索 JPEG 的十六进制头 `FF D8`)。虽然这种技术(文件雕刻)是有效的,但它完全忽略了原始文件名、目录结构和元数据,从而使调查变得混乱。 要成功执行 FAT32 文件系统的手动取证分析,需要严格的方法论。我们必须将磁盘镜像视为分层地图,计算精确的偏移量以从一个基本结构跳转到下一个。 ### 🏗️ 利用与分析流水线 ``` graph TD A["Phase 1: MBR Analysis (Sector 0)"] -->|"Extract Partition Table"| B{"Locate Type Code 0x0C (FAT32)"} B -->|"Yes"| C["Phase 2: Calculate LBA Begin Offset"] B -->|"No"| A["Keep Analyzing Partitions"] C -->|"Read Sector 128"| D["Phase 3: VBR Parsing (Volume ID)"] D -->|"Extract Metadata (Reserved Sectors, FAT Size)"| E["Phase 4: Locate Data Region Offset"] E -->|"Calculate Target Byte Address"| F["Phase 5: Read Root Directory (Cluster 2)"] F -->|"Hex Dump Analysis"| G{"Search for 0xE5 (Deleted Marker)"} G -->|"No"| F["Keep Reading Directory Entries"] G -->|"Yes! 0xE5 Found"| H["Phase 6: Extract High/Low Cluster Bits"] H -->|"Reconstruct Starting Cluster Address"| I["Phase 7: Jump to Target Cluster (431)"] I -->|"Dump Raw Bytes to ASCII"| J["Success: Flag Recovered"] ``` ## 🔬 阶段 1:MBR 分析与字节序(起点) 我们的调查从物理磁盘的绝对零点开始:**LBA 0 (逻辑块寻址)**,也称为主引导记录 (MBR)。 MBR 是存储设备的前 512 个字节。它不包含文件;它包含主分区表——该索引告诉操作系统实际文件系统(如 NTFS、Linux ext4 或 FAT32)从何处开始。 ### 步骤 1:解析主分区表 使用我们的第一个 Python 脚本 (`01_mbr_parser.py`),我们以二进制读取模式 (`rb`) 打开 `FAT32.vhd` 镜像。我们提取位于 MBR 字节 446 和 510 之间的 64 字节分区表。 ``` # 提取分区表的 64 字节(从字节 446 到 510) partition_table = mbr[446:510] # ... [循环遍历 4 个可能的 16 字节条目] ``` ### 步骤 2:字节序挑战 在分析原始十六进制数据时,我们必须考虑架构。Windows 和 x86 系统以**小端序** 格式存储多字节编号(最低有效字节最先存储)。 例如,如果我们在磁盘上看到字节 `80 00 00 00`,则实际整数值不是“8000万...”,而是 `0x00000080`(即十进制的 128)。 我们使用 Python 的 `struct.unpack('
标签:FAT32, MBR, meg, Python, VBR, 云资产清单, 信息安全, 删除文件恢复, 十六进制分析, 反取证, 安全评估, 扇区偏移, 手动解析, 数字取证, 数据恢复, 数据隐藏, 文件雕刻, 无后门, 磁盘映像, 网络安全, 自动化脚本, 逆向工程, 逻辑块寻址, 隐私保护