recovering-deleted-files-with-photorec
使用 PhotoRec 基于文件签名的数据雕刻(File Carving)引擎,从磁盘镜像和存储介质中恢复已删除文件,无论文件系统是否损坏。
Best use case
recovering-deleted-files-with-photorec is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
使用 PhotoRec 基于文件签名的数据雕刻(File Carving)引擎,从磁盘镜像和存储介质中恢复已删除文件,无论文件系统是否损坏。
Teams using recovering-deleted-files-with-photorec should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/recovering-deleted-files-with-photorec/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How recovering-deleted-files-with-photorec Compares
| Feature / Agent | recovering-deleted-files-with-photorec | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
使用 PhotoRec 基于文件签名的数据雕刻(File Carving)引擎,从磁盘镜像和存储介质中恢复已删除文件,无论文件系统是否损坏。
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# 使用 PhotoRec 恢复已删除文件
## 适用场景
- 从取证磁盘镜像或存储设备恢复已删除文件时
- 文件系统损坏、已格式化或被覆写时
- 调查中需要恢复文档、图像、视频或数据库时
- 文件系统元数据不可用但原始数据扇区仍完整时
- 从存储卡、USB 驱动器和硬盘恢复文件时
## 前置条件
- 已安装 PhotoRec(TestDisk 套件的一部分)
- 取证磁盘镜像或直接设备访问(只读)
- 充足的输出存储空间(可能大于源数据)
- 使用原始介质时需使用写保护器
- 设备访问所需的 root/sudo 权限
- 了解目标文件类型以进行有针对性的恢复
## 工作流程
### 步骤 1:安装 PhotoRec 并准备环境
```bash
# 在 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
```bash
# 对取证镜像启动 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 进行定向恢复
```bash
# 非交互模式,指定特定文件类型
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:整理和编目恢复的文件
```bash
# 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:验证和过滤恢复的文件
```bash
# 使用文件签名验证文件完整性
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 | 递归哈希计算和审计工具 |
| 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
```Related Skills
recovering-from-ransomware-attack
按照 NIST 和 CISA 框架执行结构化勒索软件事件恢复,包括环境隔离、取证证据保全、 干净基础设施重建、从已验证备份优先还原系统、凭据重置,以及针对再感染的验证。 涵盖 Active Directory 恢复、数据库还原和按依赖顺序重建应用栈。
deploying-ransomware-canary-files
使用 Python watchdog 库在关键目录中部署并监控勒索软件诱饵文件(Canary File),实现实时文件系统事件检测。 将策略性命名的诱饵文件(模拟高价值目标,如财务记录、凭据、数据库导出)放置在勒索软件通常优先枚举的 目录中,监控对诱饵文件的任何读取、修改、重命名或删除操作,并在检测到交互时通过 Email、Slack Webhook 或 Syslog 触发即时告警,在完整加密开始前提供早期预警。
analyzing-windows-lnk-files-for-artifacts
解析 Windows LNK 快捷方式文件,提取目标路径、时间戳、卷信息和机器标识符,用于取证时间线重建。
analyzing-prefetch-files-for-execution-history
解析 Windows Prefetch 文件,确定程序执行历史,包括运行次数、时间戳和引用文件,用于取证调查。
analyzing-mft-for-deleted-file-recovery
通过检查 MFT 记录条目、$LogFile、$UsnJrnl 和 MFT 松弛空间,使用 MFTECmd、analyzeMFT 和 X-Ways Forensics 分析 NTFS 主文件表($MFT)以恢复已删除文件的元数据和内容。
analyzing-cobaltstrike-malleable-c2-profiles
使用 dissect.cobaltstrike 和 pyMalleableC2 解析分析 Cobalt Strike Malleable C2 配置文件,提取 C2 指标、检测规避技术并生成网络检测签名。
analyzing-cobalt-strike-malleable-profiles
使用 pyMalleableC2 解析 Cobalt Strike 可延展 C2 配置文件,提取 Beacon 配置、HTTP 通信模式以及休眠/抖动设置。结合 JARM TLS 指纹识别在网络上检测 C2 服务器。适用于调查疑似 Cobalt Strike 基础设施或为 C2 流量构建检测签名。
triaging-vulnerabilities-with-ssvc-framework
使用 CISA 的利益相关方特定漏洞分类(SSVC)决策树框架对漏洞进行分类和优先排序,产出可操作的修复优先级:Track、Track*、Attend 或 Act。
triaging-security-incident
使用 NIST SP 800-61r3 和 SANS PICERL 框架对安全事件进行初始分类,确定严重性、范围和所需响应行动。 按类型对事件分类,根据业务影响分配优先级,并路由到相应的响应团队。适用于事件分类、 安全告警分类、严重性评估、事件优先级排序或初始事件分析等请求场景。
triaging-security-incident-with-ir-playbook
使用结构化 IR Playbook 对安全事件进行分类和优先排序,确定严重性、分配响应团队并启动适当的响应程序。
triaging-security-alerts-in-splunk
在 Splunk Enterprise Security 中对安全告警进行分类,通过 SPL 查询和事件审查(Incident Review) 仪表板对重要事件进行严重性分类、调查、关联相关遥测并做出升级或关闭决策。 适用于 SOC 分析师需要处理关联搜索产生的告警队列、确定调查优先级, 或需要为交接给二/三级分析师记录分类决策时。
tracking-threat-actor-infrastructure
威胁行为者基础设施追踪涉及使用被动 DNS、证书透明度日志、Shodan/Censys 扫描、WHOIS 分析和网络指纹技术,对对手控制的 C2 服务器、钓鱼域名和暂存服务器等资产进行监控、映射和持续追踪