| name | recovering-deleted-files-with-photorec |
| description | 使用 PhotoRec 基于文件签名的数据雕刻(File Carving)引擎,从磁盘镜像和存储介质中恢复已删除文件,无论文件系统是否损坏。 |
| domain | cybersecurity |
| subdomain | digital-forensics |
| tags | ["forensics","file-recovery","photorec","file-carving","data-recovery","evidence-recovery"] |
| version | 1.0 |
| author | mahipal |
| license | Apache-2.0 |
使用 PhotoRec 恢复已删除文件
适用场景
- 从取证磁盘镜像或存储设备恢复已删除文件时
- 文件系统损坏、已格式化或被覆写时
- 调查中需要恢复文档、图像、视频或数据库时
- 文件系统元数据不可用但原始数据扇区仍完整时
- 从存储卡、USB 驱动器和硬盘恢复文件时
前置条件
- 已安装 PhotoRec(TestDisk 套件的一部分)
- 取证磁盘镜像或直接设备访问(只读)
- 充足的输出存储空间(可能大于源数据)
- 使用原始介质时需使用写保护器
- 设备访问所需的 root/sudo 权限
- 了解目标文件类型以进行有针对性的恢复
工作流程
步骤 1:安装 PhotoRec 并准备环境
sudo apt-get install testdisk
sudo yum install testdisk
brew install testdisk
photorec --version
mkdir -p /cases/case-2024-001/recovered/{all,documents,images,databases}
file /cases/case-2024-001/images/evidence.dd
ls -lh /cases/case-2024-001/images/evidence.dd
步骤 2:以交互模式运行 PhotoRec
photorec /cases/case-2024-001/images/evidence.dd
sudo photorec /dev/sdb
步骤 3:使用命令行选项运行 PhotoRec 进行定向恢复
photorec /d /cases/case-2024-001/recovered/documents/ \
/cmd /cases/case-2024-001/images/evidence.dd \
partition_table,options,mode,fileopt,search
photorec /d /cases/case-2024-001/recovered/documents/ \
/cmd /cases/case-2024-001/images/evidence.dd \
options,keep_corrupted_file,enable \
fileopt,everything,disable \
fileopt,doc,enable \
fileopt,docx,enable \
fileopt,pdf,enable \
fileopt,xlsx,enable \
search
photorec /d /cases/case-2024-001/recovered/images/ \
/cmd /cases/case-2024-001/images/evidence.dd \
fileopt,everything,disable \
fileopt,jpg,enable \
fileopt,png,enable \
fileopt,gif,enable \
fileopt,bmp,enable \
fileopt,tif,enable \
search
photorec /d /cases/case-2024-001/recovered/databases/ \
/cmd /cases/case-2024-001/images/evidence.dd \
fileopt,everything,disable \
fileopt,sqlite,enable \
fileopt,dbf,enable \
search
步骤 4:整理和编目恢复的文件
ls /cases/case-2024-001/recovered/all/
find /cases/case-2024-001/recovered/all/ -type f | \
sed 's/.*\.//' | sort | uniq -c | sort -rn > /cases/case-2024-001/recovered/file_type_summary.txt
cd /cases/case-2024-001/recovered/all/
for ext in jpg png pdf docx xlsx pptx zip sqlite; do
mkdir -p /cases/case-2024-001/recovered/sorted/$ext
find . -name "*.$ext" -exec cp {} /cases/case-2024-001/recovered/sorted/$ext/ \;
done
find /cases/case-2024-001/recovered/all/ -type f -exec sha256sum {} \; \
> /cases/case-2024-001/recovered/recovered_hashes.txt
find /cases/case-2024-001/recovered/all/ -type f \
-printf "%f\t%s\t%T+\t%p\n" | sort > /cases/case-2024-001/recovered/file_listing.txt
步骤 5:验证和过滤恢复的文件
find /cases/case-2024-001/recovered/all/ -type f -exec file {} \; \
> /cases/case-2024-001/recovered/file_signatures.txt
while IFS= read -r line; do
filepath=$(echo "$line" | cut -d: -f1)
filetype=$(echo "$line" | cut -d: -f2-)
ext="${filepath##*.}"
if [[ "$ext" == "jpg" ]] && ! echo "$filetype" | grep -qi "JPEG"; then
echo "MISMATCH: $filepath -> $filetype"
fi
done < /cases/case-2024-001/recovered/file_signatures.txt > /cases/case-2024-001/recovered/mismatches.txt
hashdeep -r -c sha256 /cases/case-2024-001/recovered/all/ | \
grep -vFf /opt/nsrl/nsrl_sha256.txt > /cases/case-2024-001/recovered/unknown_files.txt
find /cases/case-2024-001/recovered/all/ -type f -empty -delete
find /cases/case-2024-001/recovered/all/ -name "*.jpg" -exec jpeginfo -c {} \; 2>&1 | \
grep "ERROR" > /cases/case-2024-001/recovered/corrupted_images.txt
关键概念
| 概念 | 描述 |
|---|
| 文件雕刻(File carving) | 使用文件头/尾签名从原始数据中恢复文件 |
| 文件签名 | 文件开头的魔术字节,用于标识文件类型(例如 JPEG 为 FF D8 FF) |
| 未分配空间(Unallocated space) | 未分配给任何活动文件的磁盘扇区;可能包含已删除数据 |
| 碎片文件(Fragmented files) | 存储在非连续扇区的文件;更难完整雕刻 |
| 簇/块大小(Cluster/Block size) | 文件系统上的最小分配单元;影响雕刻粒度 |
| 文件尾(File footer) | 标记文件结束的字节序列(并非所有格式都有文件尾) |
| 数据残留(Data remanence) | 删除后残留的数据,直到扇区被覆写才消失 |
| 误报(False positives) | 匹配签名但包含损坏或不完整数据的雕刻制品 |
工具与系统
| 工具 | 用途 |
|---|
| PhotoRec | 支持 300+ 种文件格式的开源文件雕刻工具 |
| TestDisk | 用于分区恢复和修复的配套工具 |
| Foremost | 最初由美国空军 OSI 开发的替代文件雕刻工具 |
| Scalpel | 基于 Foremost 的高性能文件雕刻工具 |
| hashdeep | 递归哈希计算和审计工具 |
| jpeginfo | JPEG 文件完整性验证 |
| file | 通过魔术字节识别文件类型的 Unix 工具 |
| exiftool | 从恢复的图像和文档文件中提取元数据 |
常见场景
场景 1:从嫌疑人 USB 驱动器恢复已删除证据
使用 dcfldd 对 USB 驱动器进行镜像,运行 PhotoRec 针对文档和图像格式进行恢复,按文件类型整理,对所有恢复文件计算哈希值,与已知恶意哈希集比对,从图像中提取 GPS 和时间戳元数据信息。
场景 2:格式化硬盘恢复
在整个已格式化分区上以"Whole"模式运行 PhotoRec,恢复所有文件类型,预期因文件碎片化导致较高误报率,使用签名检查验证恢复文件,为证据链建立编目和哈希记录。
场景 3:监控摄像头存储卡
从存储卡镜像恢复已删除视频文件(AVI、MP4、MOV),使用定向文件类型选择加快恢复速度,验证视频文件可播放,提取帧时间戳,在案件笔记中记录恢复情况。
场景 4:证据驱动器上的文件系统损坏
当文件系统元数据被破坏时,PhotoRec 完全绕过文件系统直接从原始扇区雕刻,尽可能多地恢复数据,接受文件名和目录结构将丢失的现实,在审查过程中根据内容重命名文件。
输出格式
PhotoRec 恢复摘要:
源镜像: evidence.dd(500 GB)
分区: NTFS(分区 2)
扫描模式: 仅空闲空间
已恢复文件: 4,523 个
文档: 234 个(doc:45,docx:89,pdf:67,xlsx:33)
图像: 2,145 个(jpg:1,890,png:198,gif:57)
视频: 34 个(mp4:22,avi:12)
压缩包: 67 个(zip:45,rar:22)
数据库: 12 个(sqlite:8,dbf:4)
其他: 2,031 个
已恢复数据: 12.4 GB
损坏文件: 312 个(已标记待审查)
输出目录: /cases/case-2024-001/recovered/all/
哈希清单: /cases/case-2024-001/recovered/recovered_hashes.txt