关于 recovering-deleted-files-with-photorec
一份面向数字取证场景的 PhotoRec 文件恢复技能,指导从磁盘镜像或存储设备中雕刻已删除文件。涵盖针对性恢复、整理和验证流程。
主要功能
- 01从原始扇区恢复文件
- 02按文件类型定向扫描
- 03整理并分类恢复文件
- 04检查文件签名与完整性
适用场景
- 01从取证镜像恢复已删除文档
- 02从格式化硬盘恢复文件
- 03从存储卡恢复监控视频
- 04文件系统损坏时提取数据
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill recovering-deleted-files-with-photorec安装后在 Claude Code 中输入/recovering-deleted-files-with-photorec确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
LICENSEreferences/api-reference.mdscripts/agent.py详细介绍
使用 PhotoRec 恢复已删除文件
适用场景
- 从取证磁盘镜像或存储设备中恢复已删除文件时
- 文件系统已损坏、被格式化或被覆盖时
- 调查过程中需要恢复文档、图像、视频或数据库时
- 文件系统元数据不可用,但原始数据扇区仍完好时
- 从存储卡、USB 驱动器和硬盘恢复文件时
前提条件
- 已安装 PhotoRec(属于 TestDisk 套件的一部分)
- 取证磁盘镜像或直接设备访问权限(只读)
- 足够的输出存储空间(可能大于源设备)
- 处理原始介质时需使用写阻断器
- 访问设备需要 root/sudo 权限
- 了解目标文件类型以便进行定向恢复
工作流
第 1 步:安装 PhotoRec 并准备环境
# Install TestDisk (includes PhotoRec) on Debian/Ubuntu
sudo apt-get install testdisk
# On RHEL/CentOS
sudo yum install testdisk
# On macOS
brew install testdisk
# Verify installation
photorec --version
# Create output directory structure
mkdir -p /cases/case-2024-001/recovered/{all,documents,images,databases}
# Verify the forensic image
file /cases/case-2024-001/images/evidence.dd
ls -lh /cases/case-2024-001/images/evidence.dd
第 2 步:以交互模式运行 PhotoRec
# Launch PhotoRec against a forensic image
photorec /cases/case-2024-001/images/evidence.dd
# Interactive menu steps:
# 1. Select the disk image: evidence.dd
# 2. Select partition table type: [Intel] for MBR, [EFI GPT] for GPT
# 3. Select partition to scan (or "No partition" for whole disk)
# 4. Select filesystem type: [ext2/ext3/ext4] or [Other] for NTFS/FAT
# 5. Choose scan scope: [Free] (unallocated only) or [Whole] (entire partition)
# 6. Select output directory: /cases/case-2024-001/recovered/all/
# 7. Press C to confirm and begin recovery
# For direct device scanning (with write-blocker)
sudo photorec /dev/sdb
第 3 步:使用命令行选项运行 PhotoRec 进行定向恢复
# Non-interactive mode with specific file types
photorec /d /cases/case-2024-001/recovered/documents/ \
/cmd /cases/case-2024-001/images/evidence.dd \
partition_table,options,mode,fileopt,search
# Recover only specific file types using photorec command mode
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
# Recover only image files
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
# Recover database files
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 步:整理并编目已恢复的文件
# PhotoRec outputs files into recup_dir.1, recup_dir.2, etc.
ls /cases/case-2024-001/recovered/all/
# Count recovered files by type
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
# Sort recovered files into directories by extension
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
# Generate SHA-256 hashes for all recovered files
find /cases/case-2024-001/recovered/all/ -type f -exec sha256sum {} \; \
> /cases/case-2024-001/recovered/recovered_hashes.txt
# Generate file listing with metadata
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 步:验证并筛选已恢复的文件
# Verify file integrity using file signatures
find /cases/case-2024-001/recovered/all/ -type f -exec file {} \; \
> /cases/case-2024-001/recovered/file_signatures.txt
# Find files with mismatched extension/signature
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
# Filter out known-good files using NSRL hash comparison
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
# Remove zero-byte and corrupted files
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
关键概念
| 概念 | 描述 |
|---|---|
| 文件雕刻 | 利用文件头/尾签名从原始数据中恢复文件 |
| 文件签名 | 文件开头的魔数字节,用于标识其类型(例如 JPEG 的 FF D8 FF) |
| 未分配空间 | 未分配给任何活动文件的磁盘扇区;可能包含已删除数据 |
| 碎片化文件 | 存储在非连续扇区中的文件;完整雕刻难度更大 |
| 簇/块大小 | 文件系统上的最小分配单元;影响雕刻粒度 |
| 文件尾部 | 标记文件结束的字节序列(并非所有格式都有尾部) |
| 数据残留 | 删除后残留在扇区中直到被覆盖的数据 |
| 误报 | 与签名匹配但包含损坏或部分数据的雕刻产物 |
工具与系统
| 工具 | 用途 |
|---|---|
| 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 Recovery Summary:
Source Image: evidence.dd (500 GB)
Partition: NTFS (Partition 2)
Scan Mode: Free space only
Files Recovered: 4,523
Documents: 234 (doc: 45, docx: 89, pdf: 67, xlsx: 33)
Images: 2,145 (jpg: 1,890, png: 198, gif: 57)
Videos: 34 (mp4: 22, avi: 12)
Archives: 67 (zip: 45, rar: 22)
Databases: 12 (sqlite: 8, dbf: 4)
Other: 2,031
Data Recovered: 12.4 GB
Corrupted Files: 312 (flagged for review)
Output Directory: /cases/case-2024-001/recovered/all/
Hash Manifest: /cases/case-2024-001/recovered/recovered_hashes.txt
评论
支持 Markdown