MFTparser
100% 在浏览器中 · 无需上传

MFT 解析器在线 MFT 查看器与 $MFT 分析工具

一款完全在浏览器中运行的 MFT 解析器。拖入一个 NTFS $MFT 文件,即可检查每一条记录 —— 已删除条目、$STANDARD_INFORMATION 与 $FILE_NAME 时间戳、备用数据流、常驻数据 —— 全程零字节上传。底层由 WebAssembly 驱动,解析由 omerbenamram/mft 这一 Rust crate 完成。

基于虚构入侵事件合成的 $MFT —— 不含任何真实数据。提示:时间范围 →“最后 1 小时”即可框定攻击时段。
为什么选择 MFT 解析器

每条记录,每个时间戳,零上传。

编译为 WebAssembly 的完整 NTFS 分诊工作台——原生工具的速度,网页的便利。

  • 已删除记录一目了然

    未分配的条目在被重用之前一直留在 $MFT 中。一键筛选,查看删除了什么、何时删除、原先位于何处。

  • 架构级隐私

    解析在您本机的 Web Worker 中运行。拔掉网线——照样可用。

  • 时间戳篡改一眼识破

    $STANDARD_INFORMATION 与 $FILE_NAME 并排显示,被回改日期的文件无所遁形。

  • 备用数据流

    Zone.Identifier、隐藏载荷和常驻 $DATA,可直接从记录中下载。

  • 文件夹浏览器

    根据父引用重建完整路径——包括孤立的已删除文件夹。

  • 不止 $MFT

    自动识别并解码 $UsnJrnl:$J、$Boot、$Secure:$SDS 和 $I30 索引。

  • 可直接用于报告的导出

    CSV、超级时间线和 HTML 分诊报告——可限定任意时间范围。

如何获取数据

从没采集过 $MFT?按顺序选第一个适用的方法,大多数人两分钟内就能完成。

  1. 采集:运行下方任一命令
  2. 把 $MFT 文件拖到上方区域
  3. 在浏览器内解析,绝不上传

系统自带 PowerShell,无需安装

仅限 Windows · 以“以管理员身份运行”打开 PowerShell · 粘贴整段代码。

PowerShell (admin)
# Elevated PowerShell: copies the live C:\$MFT to C:\triage\$MFT by reading the raw volume.
$drive = 'C:'; $dst = 'C:\triage\$MFT'
New-Item -ItemType Directory -Force -Path (Split-Path $dst) | Out-Null
if (-not ('Raw.Vol' -as [type])) { Add-Type -Namespace Raw -Name Vol -MemberDefinition '[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)] public static extern Microsoft.Win32.SafeHandles.SafeFileHandle CreateFile(string name, uint access, uint share, IntPtr sa, uint disposition, uint flags, IntPtr template);' }
$h = [Raw.Vol]::CreateFile("\\.\$drive", 2147483648, 3, [IntPtr]::Zero, 3, 0, [IntPtr]::Zero)
if ($h.IsInvalid) { throw "Cannot open \\.\$drive - run PowerShell as administrator" }
$vol = New-Object IO.FileStream($h, [IO.FileAccess]::Read)
function Read-At([long]$pos, [int]$len) { $b = New-Object byte[] $len; [void]$vol.Seek($pos, 'Begin'); $got = 0; while ($got -lt $len) { $n = $vol.Read($b, $got, $len - $got); if ($n -le 0) { throw 'Short read' }; $got += $n }; , $b }
$boot = Read-At 0 4096
$bps = [BitConverter]::ToUInt16($boot, 11); $spc = [int]$boot[13]; if ($spc -gt 128) { $spc = 1 -shl (256 - $spc) }
$cs = [long]$bps * $spc; $c = [int]$boot[64]; $rs = if ($c -gt 127) { 1 -shl (256 - $c) } else { $c * $cs }
$rec = Read-At ([BitConverter]::ToInt64($boot, 48) * $cs) ([math]::Max($rs, 4096))
$uo = [BitConverter]::ToUInt16($rec, 4)
for ($i = 1; $i -lt [BitConverter]::ToUInt16($rec, 6); $i++) { $rec[$i * 512 - 2] = $rec[$uo + 2 * $i]; $rec[$i * 512 - 1] = $rec[$uo + 2 * $i + 1] }
$a = [int][BitConverter]::ToUInt16($rec, 20)
while ($true) { $t = [BitConverter]::ToUInt32($rec, $a); if ($t -eq [uint32]::MaxValue) { throw 'No $DATA in record 0' }; if ($t -eq 0x80 -and $rec[$a + 9] -eq 0) { break }; $a += [int][BitConverter]::ToUInt32($rec, $a + 4) }
$size = [BitConverter]::ToInt64($rec, $a + 48); $p = $a + [BitConverter]::ToUInt16($rec, $a + 32)
$out = [IO.File]::Create($dst); $buf = New-Object byte[] 4MB; $lcn = [long]0
while ($rec[$p] -ne 0) {
  $ln = $rec[$p] -band 15; $lo = $rec[$p] -shr 4; $len = [long]0; $d = [long]0
  for ($i = $ln; $i -ge 1; $i--) { $len = $len * 256 + $rec[$p + $i] }
  for ($i = $ln + $lo; $i -gt $ln; $i--) { $d = $d * 256 + $rec[$p + $i] }
  if ($lo -gt 0 -and $rec[$p + $ln + $lo] -ge 128) { $d -= [long]1 -shl (8 * $lo) }
  $lcn += $d; $p += 1 + $ln + $lo; $left = $len * $cs; [void]$vol.Seek($lcn * $cs, 'Begin')
  while ($left -gt 0) { $n = $vol.Read($buf, 0, [int][math]::Min($left, $buf.Length)); if ($n -le 0) { throw 'Short read' }; $out.Write($buf, 0, $n); $left -= $n }
}
$out.SetLength($size); $out.Close(); $vol.Close()
Get-FileHash -Algorithm SHA256 $dst

生成 C:\triage\$MFT 并输出其 SHA-256。把该文件拖到上方即可。

常见坑

  • copy、robocopy 和资源管理器都读不了 $MFT:它被 Windows 锁定。需要原始读取工具(上面的脚本、KAPE、FTK Imager)和管理员权限。
  • 每个卷各有一个 $MFT。采集 D: 时,把脚本里的 $drive = 'C:' 改掉(KAPE 改 --tsource)。
  • BitLocker:在线采集读到的是已解密数据,但加密磁盘的镜像必须先用恢复密钥解锁,才能导出 $MFT。
技术内幕

关于本 MFT 解析器

MFT 解析器是一种读取 NTFS Master File Table(即每个 NTFS 卷开头的 $MFT 文件)的工具,它将 1,024 字节的记录转换为取证分析师可以操作的形式:文件名、时间戳、父目录、备用数据流、已删除条目以及驻留数据。本站就是这样的解析器之一,在你的浏览器中运行。

将 $MFT 文件拖到上方区域。文件会被读入浏览器内存,由编译为 WebAssembly 的 Rust crate omerbenamram/mft 解析,并以分页可搜索表格的形式呈现。不会上传任何内容——你可以在投放文件前断开网络以验证。下游分析可使用 CSV 导出和分流报告。

它显示什么

  • 每条 MFT 记录(已分配或已删除),并暴露 in-use 标志。
  • 两套时间戳——$STANDARD_INFORMATION 和 $FILE_NAME——一眼便可发现 时间戳篡改 (timestomping)。
  • 附加到每条记录上的备用数据流,包括 Zone.Identifier。
  • 小文件的驻留 $DATA 字节——通常是删除后唯一可恢复的版本。
  • 通过沿表中的父引用回溯,实现完整路径重建。

与其他 MFT 解析器的比较

在 Windows 分析工作站上, MFTECmd 是标准 CLI,生成 Timeline Explorer 和 KAPE 所期望的 CSV。在 Linux 下做脚本,CLI 和 Rust crate omerbenamram/mft 会输出 JSON Lines。本浏览器解析器填补了第三种场景:零安装,只要有浏览器就能运行,适合快速分流以及证据不能发送到云端服务的情况。完整比较见文章 MFT 解析器对比。

获取要解析的 $MFT

Windows 运行时 $MFT 处于锁定状态。要提取一份副本,可在运行中的系统上使用 fsutil,用 Disk Image Parser 直接在浏览器中从磁盘镜像(E01、dd、VMDK、VHD)导出,或使用 KAPE 的 MFT 目标进行完整分流采集。逐步说明见 如何从运行中的 Windows 系统提取 $MFT。

常见问题

取证常见问题

关于 NTFS、$MFT 以及本解析器如何处理您的证据的直接解答。

阅读取证笔记
什么是 Master File Table?

Master File Table($MFT)是 NTFS 的元数据索引。卷上的每个文件和目录在 $MFT 中至少有一条 1024 字节的记录,描述其名称、属性、时间戳以及数据在磁盘上的位置。

MFT 是什么的缩写?

MFT 是 Master File Table 的缩写。在磁盘上写作 $MFT —— 美元符号是 NTFS 用于元数据文件的命名约定。

Master File Table 中存储了哪些文件属性?

每条记录都包含 $STANDARD_INFORMATION(时间戳、DOS 标志)、$FILE_NAME(名称及第二组时间戳)和 $DATA(文件内容或其簇运行)。记录还可能包含 $ATTRIBUTE_LIST、$OBJECT_ID、$SECURITY_DESCRIPTOR、$INDEX_ROOT、$INDEX_ALLOCATION、$BITMAP、$REPARSE_POINT、$EA 与 $LOGGED_UTILITY_STREAM。

如何从 Windows 系统中提取 $MFT?

$MFT 是每个 NTFS 卷上的第一个文件,在 Windows 运行时通常处于锁定状态。可以使用 KAPE 或 Windows 的「fsutil」命令从活动系统导出副本,也可以在 Disk Image Parser(diskimageparser.com)中打开磁盘镜像,直接在浏览器里导出。

如何修复损坏的 Master File Table?

在采取任何操作之前先对磁盘做镜像。然后对镜像运行 chkdsk /f(速度快,可能丢弃无法读取的记录),或使用能够扫描原始卷上的「FILE」签名并重建记录的恢复工具(速度慢,但保留更多证据)。在做镜像之前,切勿对原始卷运行 chkdsk。

此工具会上传我的 $MFT 吗?

不会。解析在使用 WebAssembly 的 Web Worker 中进行。文件仅被加载到浏览器内存中,绝不会被传输。如需验证,可断开网络连接。

为什么某些记录显示为已删除?

每个 MFT 记录都有一个「使用中」标志。当文件被删除时,该标志被清除,但记录会保留在 $MFT 中直到被重新使用。这些已删除的记录通常仍保留可恢复的文件名、时间戳,有时甚至包括常驻数据。

能够处理非常大的 $MFT 文件吗?

解析在独立的 Web Worker 线程中运行,内存占用随文件大小线性增长。数 GB 大小的 $MFT 在现代浏览器中也能工作,但首次读入内存需要一些时间。

几秒内解码您的 $MFT。

无需账号、无需安装、无需上传。拖入文件,或从合成样本开始。