MFT 解析器是一种读取 $MFT(每个 NTFS 卷根部的 Master File Table),并把其 1,024 字节记录变成你可以纵深探索之物的工具。CSV、JSON、时间线、交互表格。GitHub 上有不少玩具实现。能拿出来给付费客户用的有三款。下面是我在它们之间如何选择。
MFTECmd(Eric Zimmerman)
MFTECmd 是事件响应里事实上的标准。只跑在 Windows 上的 .NET CLI,免费,能解析 $MFT、$Boot、$J($UsnJrnl 变更日志流)、$SDS(来自 $Secure 的安全描述符)以及 $LogFile。输出是 CSV,采用其余 Eric Zimmerman 工具链(Timeline Explorer、KAPE、RECmd)原生消费的、与 bodyfile 相近的版式。
什么时候用它:
- 你在一台 Windows 分析工作站上。这是最省事的路径。
- 你想把解析输出在 Timeline Explorer 里打开并交互式纵览。列映射已经是对的。
- 你在跑 KAPE;MFTECmd 是
MFTtarget 自带的解析器,省去你自己写流水线。 - 你需要解析
$LogFile。在这一点上没东西能与 MFTECmd 抗衡。 - 你想在同一工具链里解析
$J。
什么时候跳过它:你在没有 .NET 运行时的 macOS 或 Linux 上(是的,.NET 6+ 也能跑,但大多数分析师没装),或者你想把解析嵌入另一个程序里。
配套的 GUI MFT Explorer 能以树视图交互式浏览 $MFT。多数分析师二者都用:批量解析用 MFTECmd,需要追某条具体记录时用 MFT Explorer。两者共享同一份解析代码,所以你在其中一个看到的与另一个一致。
唯一的操作上的吐槽:MFTECmd 默认会把"全部"记录,包括扩展记录,作为单独的行输出。对多数工作流你想要把基础记录合并起来。用 --bdl 等过滤,第一次跑之前先读一下帮助文本。
omerbenamram/mft(Rust crate + CLI)
omerbenamram/mft crate 是本站使用的解析库。它作为 Rust 依赖(cargo add mft)和独立 CLI(mft_dump)发布。CLI 输出 CSV 或 JSON;库则把完整的记录结构(包括属性遍历)暴露给程序化使用。
什么时候用它:
- 想把 MFT 解析嵌入更大的流水线。Rust、配合 WebAssembly,或通过 FFI 从 Python(
subprocess)或 Go 调用。 - 想要 JSON Lines 输出以便管道给
jq、OpenSearch、ClickHouse 或自定义数据库。CLI 是流式输出 JSONL 的;你可以把一份 5 GB 的$MFT经过jq处理而不必把全部读入内存。 - 你在 Linux 或 macOS 上不想装 .NET。
- 你希望解析器是可审计的。代码很小、是地道的 Rust,测试语料就在仓库里。
跳过它:当你想要一种自带 GUI 与捆绑时间线工具、开箱即用的分析师体验时。也跳过它,如果你特别需要 $LogFile 解析;那是 MFTECmd 的领地。
正是这个 crate 被编译为 WebAssembly,跑在本站浏览器解析器的背后。
analyzeMFT(Python)
analyzeMFT 是经典的纯 Python 解析器。最初由 David Kovar 开发,仍在维护。CLI 为主,但可作为库导入。在大输入上比 MFTECmd 慢 10 到 50 倍,因为它是纯 Python 单线程,但对装不上原生工具时的临时脚本与一次性取证完全够用。
我在两种情况下会拿出来用:一台无法访问 cargo 的隔离 Linux 分析 VM,以及不想去学 MFTECmd CSV 列顺序、只想从所有记录中提取某个字段的快速一行命令。细节与代码示例见 用 Python 解析 $MFT。
基于浏览器的解析(本站)
本站的解析器 把 omerbenamram/mft crate 编译为 WebAssembly,放进 Web Worker 运行。把 $MFT 文件拖到页面上,记录就会出现在一个分页、可搜索、可排序的表格里。不会上传任何东西;字节始终留在你浏览器的内存中。
什么时候用它:
- 你想快速读一份
$MFT而不装任何东西。给新人做入职、演示 NTFS 结构,或者快速来个第二意见。 - 政策禁止把证据发送到云服务。WebAssembly 解析发生在本地。你可以在拖入文件之前断开网络来验证。
- 你需要把一次取证视图分享给一个没有取证工具链、也不会装的同事。
- 你在讲 NTFS 结构,想要一个交互沙盒,让学员去戳记录、看布局变化。
跳过它:当你拿到的是来自高负载服务器的几个 GB 的 $MFT(内存模型线性扩展),或者你需要的输出要与更广泛的 Eric Zimmerman 流水线(Timeline Explorer 的列映射)集成。这些场景请用 MFTECmd。
Sleuth Kit,为完整性而提
Sleuth Kit 的 fls -m -r -o <offset> image.dd 走遍 MFT,输出包含已删除项的 bodyfile。istat -o <offset> image.dd <inode> 以人类可读形式打印一条记录。icat -o <offset> image.dd <inode> 提取文件数据。
Sleuth Kit 是这些场景下的正确选择:你处理的是整盘镜像而不是抽取出的 $MFT;你关注跨文件系统证据(同一镜像中的 FAT/exFAT/HFS+);或者你想要一个在法庭上谱系无可挑剔的解析器。输出不如 MFTECmd 方便,但其工具链已经过同行审阅二十年。
横向对比
| 特性 | MFTECmd | omerbenamram/mft | 浏览器解析器 | analyzeMFT |
|---------|---------|------------------|----------------|------------|
| 平台 | Windows(.NET) | Linux / macOS / Windows / Wasm | 任何现代浏览器 | 有 Python 3 的地方 |
| 安装 | 单个二进制 | cargo install 或 release 二进制 | 无 | pip install |
| 输出 | CSV(Timeline Explorer schema) | CSV / JSONL | 交互表格 + CSV 导出 | CSV |
| $UsnJrnl:$J | 支持 | 不支持(单独的 omerbenamram/usn crate) | 浏览器解析器会链接到 $J 视图 | 不支持 |
| $LogFile | 支持 | 不支持 | 不支持 | 不支持 |
| 可脚本化 | 仅 CLI | 库 + CLI | UI 驱动 | 库 + CLI |
| 速度(1 GB MFT) | 约 30 s | 约 20 s | 约 60 s(含 UI 开销) | 10–20 分钟 |
| 隐私 | 本地 | 本地 | 本地(可通过断网核验) | 本地 |
怎么挑
Windows 工作站上的常规 IR 工作:MFTECmd。它无缝接入 KAPE 与 Timeline Explorer,是最少惊喜的路径。
要做一个吃多块磁盘、跑在 Linux 上、想要 JSON 的流水线:omerbenamram/mft。CLI 快,库整洁。
一次性取证、敌对网络场景、教学课堂、或一个没有取证机器的同事:浏览器解析器。
MFT 只是其中一个文件系统的整盘镜像调查,或者法庭可采性谱系比便利性更重要:Sleuth Kit。
它们彼此互补。多数有经验的检查员会按当下情形挑合适的那一个。没有唯一的正解。
延伸阅读
- Eric Zimmerman 的工具索引:ericzimmerman.github.io。MFTECmd 是其中之一;它周围的生态(RECmd、EZViewer、KAPE)让它成为 IR 默认。
- Sleuth Kit Wiki。
fls、istat、icat文档以及 NTFS 概念性笔记。 omerbenamram/mft的 README 与测试语料。如果你想确切了解该解析器处理与不处理的内容,值得一读。