foremost
2026/5/29工具工具文件恢复foremost大约 4 分钟
foremost
链接
是什么
foremost 是文件雕刻工具,用来从二进制数据、磁盘镜像、内存片段或损坏文件中按文件头/文件尾恢复文件。
CTF Misc 中常见场景:
- 图片或固件里嵌入了压缩包
- 磁盘镜像中有删除文件
- 原文件被拼接进另一个文件
- 文件系统结构损坏,只能按特征恢复
安装与配置
Ubuntu/Kali:
sudo apt update
sudo apt install foremost验证:
foremost -h基本用法
从文件中恢复
foremost challenge.bin默认输出到 output/ 目录。
指定输出目录
foremost -i challenge.bin -o out指定恢复类型
foremost -t jpg,png,zip,pdf -i challenge.bin -o out查看审计日志
cat out/audit.txt更多选项
支持的文件类型
jpg — JPEG 图片
gif — GIF 图片
png — PNG 图片
bmp — BMP 图片
pdf — PDF 文档
doc — Word 文档
xls — Excel 文档
ppt — PowerPoint 文档
zip — ZIP 压缩包
rar — RAR 压缩包
7z — 7z 压缩包
gz — gzip 压缩包
tar — tar 归档
html — HTML 文件
exe — PE 可执行文件
elf — ELF 可执行文件
wav — WAV 音频
mp3 — MP3 音频
avi — AVI 视频
mp4 — MP4 视频
ole — OLE 对象指定配置文件
foremost -c /etc/foremost.conf -i challenge.bin -o out自定义配置文件可以添加新的文件签名。
限制恢复大小
foremost -s 10M -i challenge.bin -o out只恢复小于 10MB 的文件。
安静模式
foremost -q -i challenge.bin -o out覆盖输出目录
foremost -T -i challenge.bin -o out如果输出目录已存在,自动加时间戳。
从磁盘镜像恢复
foremost -i disk.img -o recovered
foremost -i disk.dd -o recovered
foremost -i disk.E01 -o recovered从内存镜像恢复
foremost -i memory.raw -o recovered文件雕刻原理
文件头和文件尾
文件格式 文件头 文件尾
JPEG FF D8 FF FF D9
PNG 89 50 4E 47 49 45 4E 44
GIF 47 49 46 38 00 3B
PDF 25 50 44 46 25 25 45 4F 46
ZIP 50 4B 03 04 50 4B 05 06
RAR 52 61 72 21 —雕刻过程
1. 扫描数据流寻找文件头
2. 从文件头开始向后搜索
3. 找到对应文件尾或达到最大大小
4. 提取文件头到文件尾之间的数据
5. 保存为对应类型的文件局限性
- 文件头被破坏时无法识别
- 碎片化文件可能不完整
- 加密或压缩数据无法直接恢复
- 文件名丢失,需要手动判断CTF常用技巧
和 binwalk 配合
先用 binwalk 看结构:
binwalk challenge.bin再用 foremost 恢复:
foremost -i challenge.bin -o foremost_out恢复压缩包
foremost -t zip,rar,7z,gz -i image.png -o out如果恢复出压缩包,再用 file、7z、binwalk 继续分析。
处理磁盘镜像
foremost -i disk.img -o recovered恢复出的文件不一定保持原始文件名,要通过内容、类型和时间线继续判断。
分析恢复结果
# 查看恢复的文件
ls -la out/jpg/
ls -la out/png/
ls -la out/zip/
# 判断文件类型
file out/jpg/*
file out/zip/*
# 查看文件内容
strings out/zip/*批量分析
#!/bin/bash
# 批量恢复和分析
for f in *.bin; do
echo "=== Processing $f ==="
foremost -i "$f" -o "out_${f%.*}"
echo "=== Results ==="
find "out_${f%.*}" -type f | while read file; do
file "$file"
done
done自定义签名
创建自定义配置文件:
# custom.conf
# 自定义文件类型
yara y 100000 \x72\x75\x6C\x65 \x65\x6E\x64使用:
foremost -c custom.conf -i challenge.bin -o out恢复后处理
1. 检查恢复的文件完整性
2. 用 file 判断真实类型
3. 用 xxd 检查文件头
4. 用 strings 搜索可见字符串
5. 用 binwalk 检查是否还有嵌套常见问题
恢复结果很多
先按文件类型筛选,优先看文本、压缩包、图片、PDF。不要一开始逐个打开所有文件。
没恢复出东西
可能文件头被破坏、数据被加密、压缩或不是常见格式。回到十六进制和文件头分析。
foremost 和 binwalk 区别
binwalk 偏识别和提取嵌入结构;foremost 偏按文件签名从数据流中雕刻文件。两者经常一起用。
恢复的文件不完整
1. 文件碎片化
2. 文件头/尾被破坏
3. 数据被覆盖
4. 尝试手动修复文件头大文件处理慢
1. 使用 -t 指定只恢复需要的类型
2. 使用 -s 限制文件大小
3. 使用 SSD 存储
4. 分割大文件处理输出目录问题
# 确保输出目录不存在或使用 -T 覆盖
rm -rf output/
foremost -i challenge.bin -o output
# 或使用 -T 自动加时间戳
foremost -T -i challenge.bin -o output关联
- 文件头、文件尾与真实类型
- 磁盘镜像与文件恢复
- 压缩包与嵌套文件
- binwalk
- file
- xxd与hexdump