ext2 文件恢复
Ext2 是 Linux 中早期广泛使用的文件系统,虽然后被 Ext3/4 取代,但在嵌入式、固件、老旧系统及 CTF 取证题中仍经常出现
由于 Ext2 不涉及日志,一旦文件被删除,其数据并不会立即消失,因此恢复成功率较高
文件恢复主要基于 inode 信息和间接块指针的重建
核心结构
| 结构 | 大小 | 关键字段 |
|---|---|---|
| 超级块 (Superblock) | 1024 字节 | 块大小、inode 总数、块总数、第一个 inode 号(固定为1)、卷名、最后挂载时间、魔数 0xEF53 等 |
| 组描述符表 (GDT) | 32 字节/组 | 块位图位置、inode 位图位置、inode 表起始块、空闲块计数、空闲 inode 计数、目录数 |
| inode | 128 字节(标准) | 文件模式、大小、UID/GID、时间戳(atime,ctime,mtime,dtime)、直接块指针(12个)、间接块指针(一级、二级、三级各一个) |
| 目录项 | 变长 | inode 号、条目长度、名字长度、文件类型、文件名(以 \0 结束,4 字节对齐) |
删除机制
在 Ext2 中,删除文件时:
将目录项中的
inode号设置为 0(或标记为未使用)在
inode位图中将对应位清零更新
inode中的 dtime(删除时间),并将i_blocks和文件大小清零(部分操作)块位图中释放数据块(将对应位清零)
但数据块内容仍保留在磁盘上,直到被新数据覆盖
因此恢复的关键是 重建 inode 到数据块的映射
实战案例
磁盘恢复(ext2 文件恢复)
非预期解法如下
1 | strings -a 86b265d37d1fc10b721a2accae04a60d | grep -i FLAG |
预期解法如下
使用 Sleuth Kit 工具中 fsstat 命令对文件解析
1 | FILE SYSTEM INFORMATION # 文件系统信息部分 |
接下来我们查找被删除的文件
1 | fls.exe -f ext2 -r -d 86b265d37d1fc10b721a2accae04a60d |
$OrphanFiles 是 Sleuth Kit 构造出来的虚拟目录,表示这些 inode 已经没有正常目录项引用了,但 inode 和数据块还残留在文件系统中

目录里还能看到 secret.txt 这个删除文件名痕迹,但它的 inode 号已经不可用,TSK 显示成 0
1 | r/- * 0: secret.txt |
转换方向去恢复虚拟目录拿到 flag

1 | FLAG-ggmgk05096 |