L’interface est localisée ; les présentations et documents des Skills sont traduits automatiquement par IA dans votre langue. Le code, les commandes, chemins et termes techniques restent en version originale, et le document de l’auteur fait foi.
Explorer les Skills
Productivité · SKILL.md

recovering-deleted-files-with-photorec

recovering-deleted-files-with-photorec

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

Independent GitHub snapshot · Automated classification · Original documentation governs

Documentation de la 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 enregistrées