MFT 解析器在线 MFT 查看器与 $MFT 分析工具
一款完全在浏览器中运行的 MFT 解析器。拖入一个 NTFS $MFT 文件,即可检查每一条记录 —— 已删除条目、$STANDARD_INFORMATION 与 $FILE_NAME 时间戳、备用数据流、常驻数据 —— 全程零字节上传。底层由 WebAssembly 驱动,解析由 omerbenamram/mft 这一 Rust crate 完成。
- 0 字节上传,从不
- Rust → Wasm原生级解析速度
- 5 种工件$MFT · $J · $Boot · $SDS · $I30
- 数 GB卷也能在 Web Worker 中处理
每条记录,每个时间戳,零上传。
编译为 WebAssembly 的完整 NTFS 分诊工作台——原生工具的速度,网页的便利。
已删除记录一目了然
未分配的条目在被重用之前一直留在 $MFT 中。一键筛选,查看删除了什么、何时删除、原先位于何处。
架构级隐私
解析在您本机的 Web Worker 中运行。拔掉网线——照样可用。
时间戳篡改一眼识破
$STANDARD_INFORMATION 与 $FILE_NAME 并排显示,被回改日期的文件无所遁形。
备用数据流
Zone.Identifier、隐藏载荷和常驻 $DATA,可直接从记录中下载。
文件夹浏览器
根据父引用重建完整路径——包括孤立的已删除文件夹。
不止 $MFT
自动识别并解码 $UsnJrnl:$J、$Boot、$Secure:$SDS 和 $I30 索引。
可直接用于报告的导出
CSV、超级时间线和 HTML 分诊报告——可限定任意时间范围。
如何获取数据
从没采集过 $MFT?按顺序选第一个适用的方法,大多数人两分钟内就能完成。
- 采集:运行下方任一命令
- 把
$MFT文件拖到上方区域 - 在浏览器内解析,绝不上传
系统自带 PowerShell,无需安装
仅限 Windows · 以“以管理员身份运行”打开 PowerShell · 粘贴整段代码。
# 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。把该文件拖到上方即可。
KAPE
在 KAPE 目录下用管理员命令行运行。FileSystem 目标还会一并收集 $LogFile、$J、$Boot 和 $SDS。
kape.exe --tsource C: --target FileSystem --tdest C:\triage文件位于 C:\triage\C\$MFT。
FTK Imager(在线主机)
- 以管理员身份运行:File → Add Evidence Item → Physical Drive → 选择系统盘。
- 展开 NTFS 分区 → [root]。
- 右键
$MFT→ Export Files → 选择C:\triage。
The Sleuth Kit(Linux、macOS、WSL)
mmls disk.E01
icat -o <start-sector> disk.E01 0 > MFTmmls 会列出分区:使用 NTFS 分区的 Start 扇区(通常为 2048)。单卷镜像可去掉 -o。inode 0 永远是 $MFT,输出文件名无所谓。
FTK Imager
- File → Add Evidence Item → Image File → 选择 .E01、.dd 或 .vmdk。
- 展开 NTFS 分区 → [root]。
- 右键
$MFT→ Export Files。
在浏览器中
用 Disk Image Parser 打开镜像(同样不上传),从卷根目录导出 $MFT。
$MFT 位于每个 NTFS 卷的根目录(C:\、D:\ 等)。它是隐藏的系统元文件,资源管理器中不会显示。
C:\$MFT主文件表(Master File Table)— 每个 NTFS 卷一个C:\$Extend\$UsnJrnl:$JUSN 变更日志($J 数据流)C:\$Boot卷引导记录C:\$Secure:$SDS安全描述符数据流C:\<folder>\$I30目录索引($INDEX_ALLOCATION),每个文件夹一个\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\$MFT卷影副本中的旧版本(vssadmin list shadows)
本工具一次打开一个文件:只要 $MFT 就够了。$J、$Boot、$SDS 和 $I30 也用同样方式打开;在 $J 视图中关联 $MFT 即可解析文件名和路径。
常见坑
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 在现代浏览器中也能工作,但首次读入内存需要一些时间。