analyzing-mft-for-deleted-file-recovery
通过检查 MFT 记录条目、$LogFile、$UsnJrnl 和 MFT 松弛空间,使用 MFTECmd、analyzeMFT 和 X-Ways Forensics 分析 NTFS 主文件表($MFT)以恢复已删除文件的元数据和内容。
Best use case
analyzing-mft-for-deleted-file-recovery is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
通过检查 MFT 记录条目、$LogFile、$UsnJrnl 和 MFT 松弛空间,使用 MFTECmd、analyzeMFT 和 X-Ways Forensics 分析 NTFS 主文件表($MFT)以恢复已删除文件的元数据和内容。
Teams using analyzing-mft-for-deleted-file-recovery 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/analyzing-mft-for-deleted-file-recovery/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How analyzing-mft-for-deleted-file-recovery Compares
| Feature / Agent | analyzing-mft-for-deleted-file-recovery | 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?
通过检查 MFT 记录条目、$LogFile、$UsnJrnl 和 MFT 松弛空间,使用 MFTECmd、analyzeMFT 和 X-Ways Forensics 分析 NTFS 主文件表($MFT)以恢复已删除文件的元数据和内容。
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
# 分析 MFT 用于已删除文件恢复
## 概述
NTFS 主文件表($MFT)是 NTFS 卷上每个文件和目录的中央元数据存储库。每个文件至少由一条 1024 字节的 MFT 记录表示,其中包含 $STANDARD_INFORMATION(时间戳、权限)、$FILE_NAME(名称、父目录、时间戳)和 $DATA(文件内容或簇运行指针)等属性。文件被删除时,其 MFT 记录被标记为非活动状态(InUse 标志清除),但元数据保留到被新文件的条目覆盖为止。这种持久性使 MFT 分析成为恢复已删除文件证据、重建文件系统时间线以及检测反取证活动(如时间戳篡改)的主要技术。
## 前置条件
- 取证磁盘镜像(E01、raw/dd、VMDK 或 VHDX 格式)
- MFTECmd(Eric Zimmerman 工具)或 analyzeMFT(基于 Python)
- FTK Imager、Arsenal Image Mounter 或类似工具用于挂载镜像
- Timeline Explorer 或 Excel 用于 CSV 分析
- Python 3.8+ 用于自定义分析脚本
- 了解 NTFS 文件系统内部结构
## MFT 结构和记录布局
### MFT 记录头部
每条 MFT 记录以签名"FILE"(0x46494C45)开头,包含:
| 偏移量 | 大小 | 字段 |
|--------|------|------|
| 0x00 | 4 字节 | 签名("FILE") |
| 0x04 | 2 字节 | 更新序列偏移量 |
| 0x06 | 2 字节 | 更新序列大小 |
| 0x08 | 8 字节 | $LogFile 序列号 |
| 0x10 | 2 字节 | 序列号 |
| 0x12 | 2 字节 | 硬链接计数 |
| 0x14 | 2 字节 | 第一个属性偏移量 |
| 0x16 | 2 字节 | 标志(0x01 = 使用中,0x02 = 目录) |
| 0x18 | 4 字节 | MFT 记录已用大小 |
| 0x1C | 4 字节 | MFT 记录已分配大小 |
| 0x20 | 8 字节 | 基础文件记录引用 |
| 0x28 | 2 字节 | 下一个属性 ID |
### 关键 MFT 属性
| 类型 ID | 名称 | 描述 |
|---------|------|------|
| 0x10 | $STANDARD_INFORMATION | 时间戳、标志、所有者 ID、安全 ID |
| 0x30 | $FILE_NAME | 文件名、父目录 MFT 引用、时间戳 |
| 0x40 | $OBJECT_ID | 文件的唯一 GUID |
| 0x50 | $SECURITY_DESCRIPTOR | ACL 权限 |
| 0x60 | $VOLUME_NAME | 卷标(仅卷元数据文件) |
| 0x80 | $DATA | 文件内容(小于 700 字节时为驻留型)或簇运行列表 |
| 0x90 | $INDEX_ROOT | 目录的 B 树索引根 |
| 0xA0 | $INDEX_ALLOCATION | 大型目录的 B 树索引条目 |
| 0xB0 | $BITMAP | 索引或 MFT 的分配位图 |
## 已删除文件恢复技术
### 技术 1:使用 MFTECmd 进行 MFT 记录分析
```powershell
# 使用 KAPE 或 FTK Imager 从取证镜像提取 $MFT
# 使用 MFTECmd 解析 $MFT
MFTECmd.exe -f "C:\Evidence\$MFT" --csv C:\Output --csvf mft_full.csv
# 在 Timeline Explorer 中过滤已删除文件(InUse = FALSE)
# 查找 InUse 列为 False 的条目
```
**在 CSV 输出中识别已删除文件:**
- `InUse` = False 表示已删除或已重新分配的记录
- `ParentPath` 显示删除前的原始文件位置
- `FileSize` 显示原始大小(可能仍可恢复)
- `$STANDARD_INFORMATION` 和 `$FILE_NAME` 属性中的时间戳持续存在
### 技术 2:USN 日志($UsnJrnl:$J)分析
USN 日志记录 NTFS 卷上文件的所有更改,包括创建、删除、重命名和数据修改事件。
```powershell
# 使用 MFTECmd 解析 USN 日志
MFTECmd.exe -f "C:\Evidence\$J" --csv C:\Output --csvf usn_journal.csv
# 删除证据的关键 USN 原因代码:
# USN_REASON_FILE_DELETE = 0x00000200
# USN_REASON_CLOSE = 0x80000000
# USN_REASON_RENAME_OLD_NAME = 0x00001000
# USN_REASON_RENAME_NEW_NAME = 0x00002000
```
### 技术 3:$LogFile 事务分析
$LogFile 存储 NTFS 事务记录,即使 USN 日志已循环,也能揭示文件操作。
```powershell
# 使用 LogFileParser 解析 $LogFile
LogFileParser.exe -l "C:\Evidence\$LogFile" -o C:\Output
# 查找表示文件删除的 REDO 和 UNDO 操作:
# - DeallocateFileRecordSegment(释放文件记录段)
# - DeleteAttribute(删除属性)
# - UpdateResidentValue(清除 InUse 标志)
```
### 技术 4:MFT 松弛空间分析
MFT 松弛空间存在于 MFT 记录已用部分末尾和已分配 1024 字节末尾之间。该区域可能包含之前文件记录的残留数据。
```python
import struct
def parse_mft_slack(mft_path: str, output_path: str):
"""提取并分析 MFT 松弛空间中已删除文件的残留数据。"""
with open(mft_path, "rb") as f:
record_size = 1024
record_num = 0
slack_findings = []
while True:
record = f.read(record_size)
if len(record) < record_size:
break
# 验证 FILE 签名
if record[:4] != b"FILE":
record_num += 1
continue
# 从偏移量 0x18 获取已用大小
used_size = struct.unpack("<I", record[0x18:0x1C])[0]
if used_size < record_size:
slack = record[used_size:]
# 检查松弛空间是否包含可读字符串或属性头部
if any(c > 0x20 and c < 0x7F for c in slack[:50]):
slack_findings.append({
"record": record_num,
"used_size": used_size,
"slack_size": record_size - used_size,
"slack_preview": slack[:100].hex()
})
record_num += 1
return slack_findings
```
## 与支持性痕迹的关联
### 与 $Recycle.Bin 交叉引用
```powershell
# 使用 RBCmd 解析回收站
RBCmd.exe -d "C:\Evidence\$Recycle.Bin" --csv C:\Output --csvf recycle_bin.csv
# 关联: $I 文件包含原始路径和删除时间戳
# 将 $R 文件中的 MFT 条目号匹配回原始 MFT 记录
```
### 与卷影副本交叉引用
```powershell
# 列出卷影副本
vssadmin list shadows
# 挂载卷影副本并从每个副本提取 $MFT
# 比较不同卷影副本中的 MFT 记录以追踪文件随时间的变化
```
## 取证价值
- **已删除文件元数据恢复**:原始文件名、路径、大小和时间戳
- **时间线重建**:文件创建、修改、访问和删除事件
- **时间戳篡改检测**:比较 $SI 和 $FN 时间戳
- **数据雕刻引导**:MFT 簇运行指向磁盘上的文件内容
- **反取证检测**:识别被擦除或被篡改的 MFT 记录
## 参考资料
- NTFS MFT 高级取证分析: https://www.deaddisk.com/posts/ntfs-mft-advanced-forensic-analysis-guide/
- MFT 松弛空间的取证价值: https://www.sygnia.co/blog/the-forensic-value-of-mft-slack-space/
- MFTECmd 文档: https://ericzimmerman.github.io/
- SANS FOR500: Windows 取证分析Related Skills
recovering-deleted-files-with-photorec
使用 PhotoRec 基于文件签名的数据雕刻(File Carving)引擎,从磁盘镜像和存储介质中恢复已删除文件,无论文件系统是否损坏。
performing-file-carving-with-foremost
使用 Foremost 的文件头/文件尾签名雕刻技术,从磁盘镜像和未分配空间中恢复文件,无论文件系统状态如何均可提取证据。
implementing-file-integrity-monitoring-with-aide
配置 AIDE(高级入侵检测环境)进行文件完整性监控,包括基线创建、定期完整性检查、变更检测和告警
detecting-fileless-malware-techniques
检测和分析完全在内存中运行的无文件恶意软件,这类恶意软件利用 PowerShell、 WMI、.NET 反射、注册表存储载荷和离地攻击二进制文件(LOLBins), 不在磁盘上写入传统可执行文件。适用于无文件威胁检测、内存恶意软件调查、 LOLBin 滥用分析或 WMI 持久化检查等请求。
detecting-fileless-attacks-on-endpoints
检测完全在内存(RAM)中执行、不向磁盘写入持久文件的无文件恶意软件和内存攻击, 规避传统杀毒软件。适用于为 PowerShell 攻击、反射式 DLL 注入、WMI 持久化和注册表驻留恶意软件 构建检测规则的场景。
deploying-ransomware-canary-files
使用 Python watchdog 库在关键目录中部署并监控勒索软件诱饵文件(Canary File),实现实时文件系统事件检测。 将策略性命名的诱饵文件(模拟高价值目标,如财务记录、凭据、数据库导出)放置在勒索软件通常优先枚举的 目录中,监控对诱饵文件的任何读取、修改、重命名或删除操作,并在检测到交互时通过 Email、Slack Webhook 或 Syslog 触发即时告警,在完整加密开始前提供早期预警。
building-threat-actor-profile-from-osint
使用开源情报(OSINT)技术构建全面的威胁行为者档案,记录对手的动机、能力、基础设施和 TTP,用于主动防御。
analyzing-windows-shellbag-artifacts
分析 Windows ShellBag 注册表取证痕迹,使用 SBECmd 和 ShellBags Explorer 重建文件夹浏览活动,检测对可移动介质和网络共享的访问,并在删除后仍能确认用户与目录的交互行为。
analyzing-windows-registry-for-artifacts
提取并分析 Windows 注册表配置单元,以发现用户活动、已安装软件、自启动条目及系统入侵证据。
analyzing-windows-prefetch-with-python
使用 windowsprefetch Python 库解析 Windows Prefetch 文件,重建应用程序执行历史,检测重命名或伪装的二进制文件,并识别可疑的程序执行模式。
analyzing-windows-lnk-files-for-artifacts
解析 Windows LNK 快捷方式文件,提取目标路径、时间戳、卷信息和机器标识符,用于取证时间线重建。
analyzing-windows-event-logs-in-splunk
在 Splunk 中分析 Windows Security、System 和 Sysmon 事件日志,使用映射到 MITRE ATT&CK 技术的 SPL 查询检测身份验证攻击、权限提升(Privilege Escalation)、持久化(Persistence)机制和横向移动 (Lateral Movement)。适用于 SOC 分析师调查基于 Windows 的威胁、构建检测查询,或对 Windows 终端和域控制器执行取证时间线分析。