Analyzes NTFS $MFT records, $LogFile, $UsnJrnl, and slack space using MFTECmd, analyzeMFT, and X-Ways Forensics to recover deleted files' metadata and content in digital forensics investigations.
npx claudepluginhub killvxk/cybersecurity-skills-zhThis skill uses the workspace's default tool permissions.
NTFS 主文件表($MFT)是 NTFS 卷上每个文件和目录的中央元数据存储库。每个文件至少由一条 1024 字节的 MFT 记录表示,其中包含 $STANDARD_INFORMATION(时间戳、权限)、$FILE_NAME(名称、父目录、时间戳)和 $DATA(文件内容或簇运行指针)等属性。文件被删除时,其 MFT 记录被标记为非活动状态(InUse 标志清除),但元数据保留到被新文件的条目覆盖为止。这种持久性使 MFT 分析成为恢复已删除文件证据、重建文件系统时间线以及检测反取证活动(如时间戳篡改)的主要技术。
Analyzes NTFS $MFT to recover metadata and content of deleted files via record entries, $LogFile, $UsnJrnl, and slack space using MFTECmd, analyzeMFT, X-Ways Forensics. For DFIR investigations.
Analyzes NTFS MFT to recover deleted files' metadata and content via record entries, $LogFile, $UsnJrnl, and slack space using MFTECmd, analyzeMFT, X-Ways.
Analyzes NTFS slack space, MFT entries, USN journals, and alternate data streams to recover hidden data and reconstruct file activity using TSK and Python tools.
Share bugs, ideas, or general feedback.
NTFS 主文件表($MFT)是 NTFS 卷上每个文件和目录的中央元数据存储库。每个文件至少由一条 1024 字节的 MFT 记录表示,其中包含 $STANDARD_INFORMATION(时间戳、权限)、$FILE_NAME(名称、父目录、时间戳)和 $DATA(文件内容或簇运行指针)等属性。文件被删除时,其 MFT 记录被标记为非活动状态(InUse 标志清除),但元数据保留到被新文件的条目覆盖为止。这种持久性使 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 |
| 类型 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 的分配位图 |
# 使用 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 属性中的时间戳持续存在USN 日志记录 NTFS 卷上文件的所有更改,包括创建、删除、重命名和数据修改事件。
# 使用 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
$LogFile 存储 NTFS 事务记录,即使 USN 日志已循环,也能揭示文件操作。
# 使用 LogFileParser 解析 $LogFile
LogFileParser.exe -l "C:\Evidence\$LogFile" -o C:\Output
# 查找表示文件删除的 REDO 和 UNDO 操作:
# - DeallocateFileRecordSegment(释放文件记录段)
# - DeleteAttribute(删除属性)
# - UpdateResidentValue(清除 InUse 标志)
MFT 松弛空间存在于 MFT 记录已用部分末尾和已分配 1024 字节末尾之间。该区域可能包含之前文件记录的残留数据。
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
# 使用 RBCmd 解析回收站
RBCmd.exe -d "C:\Evidence\$Recycle.Bin" --csv C:\Output --csvf recycle_bin.csv
# 关联: $I 文件包含原始路径和删除时间戳
# 将 $R 文件中的 MFT 条目号匹配回原始 MFT 记录
# 列出卷影副本
vssadmin list shadows
# 挂载卷影副本并从每个副本提取 $MFT
# 比较不同卷影副本中的 MFT 记录以追踪文件随时间的变化