인터페이스는 현지화되어 있으며, Skill 소개와 설명 문서는 선택한 언어로 AI가 자동 번역합니다. 코드·명령어·경로·전문 용어는 원문을 유지하며 원작자 문서가 우선합니다.
Skills 둘러보기
생산성 및 협업 · SKILL.md

recovering-deleted-files-with-photorec

recovering-deleted-files-with-photorec

使用 PhotoRec 基于文件签名的数据雕刻(File Carving)引擎,从磁盘镜像和存储介质中恢复已删除文件,无论文件系统是否损坏。

Independent GitHub snapshot · Automated classification · Original documentation governs

Skill 문서

GitHub

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 并准备环境

# 在 Debian/Ubuntu 上安装 TestDisk(包含 PhotoRec)
sudo apt-get install testdisk

# 在 RHEL/CentOS 上安装
sudo yum install testdisk

# 在 macOS 上安装
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
photorec /cases/case-2024-001/images/evidence.dd

# 交互菜单操作步骤:
# 1. 选择磁盘镜像:evidence.dd
# 2. 选择分区表类型:[Intel] 表示 MBR,[EFI GPT] 表示 GPT
# 3. 选择要扫描的分区(或选"No partition"扫描整个磁盘)
# 4. 选择文件系统类型:[ext2/ext3/ext4] 或 [Other] 表示 NTFS/FAT
# 5. 选择扫描范围:[Free](仅未分配空间)或 [Whole](整个分区)
# 6. 选择输出目录:/cases/case-2024-001/recovered/all/
# 7. 按 C 确认并开始恢复

# 直接扫描设备(使用写保护器时)
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:整理和编目恢复的文件

# PhotoRec 将文件输出到 recup_dir.1、recup_dir.2 等目录
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

# 为所有恢复文件生成 SHA-256 哈希值
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

# 使用 NSRL 哈希集比对过滤已知良性文件
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递归哈希计算和审计工具
jpeginfoJPEG 文件完整性验证
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
저장한 Skills