MFTparser
100% ブラウザ内 · アップロードなし

MFT パーサーオンライン MFT ビューア & $MFT 解析ツール

ブラウザ内で完結する MFT パーサーです。NTFS の $MFT ファイルをドロップし、すべてのレコードを検査できます — 削除済みエントリ、$STANDARD_INFORMATION と $FILE_NAME のタイムスタンプ、代替データ ストリーム、常駐データ — 1 バイトも送信しません。内部は WebAssembly、解析は omerbenamram/mft Rust クレートが担います。

架空の侵害事案から合成した $MFT です — 実データは含まれません。ヒント:期間 →「最後の 1 時間」で攻撃の時間帯に絞れます。
MFT パーサーの特長

すべてのレコード、すべてのタイムスタンプ。アップロードはゼロ。

WebAssembly にコンパイルした NTFS トリアージ環境。ネイティブツールの速さを、Web ページの手軽さで。

  • 削除済みレコードを可視化

    未割り当てのエントリは再利用されるまで $MFT に残ります。ワンクリックで絞り込み、何が・いつ・どこから削除されたかを確認できます。

  • 設計からプライベート

    解析はお使いのマシン上の Web Worker で実行。ネットワークを切断しても動作します。

  • タイムストンピングをひと目で

    $STANDARD_INFORMATION と $FILE_NAME を並べて表示。改ざんされた日時が浮かび上がります。

  • 代替データストリーム

    Zone.Identifier、隠されたペイロード、常駐 $DATA をレコードから直接ダウンロード。

  • フォルダーエクスプローラー

    親参照からフルパスを再構築。孤立した削除済みフォルダーも含みます。

  • $MFT だけではない

    $UsnJrnl:$J、$Boot、$Secure:$SDS、$I30 インデックスを自動検出してデコードします。

  • レポート向けエクスポート

    CSV、スーパータイムライン、HTML トリアージレポートを任意の期間で出力。

データの取得方法

$MFT を収集したことがなくても大丈夫。合う方法を上から選べば、ほとんどの人は 2 分以内に終わります。

  1. 収集:下のコマンドを 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 がロック)。raw リーダー(スクリプト、KAPE、FTK Imager)と管理者プロンプトが必要です。
  • $MFT はボリュームごとに 1 つ。D: ならスクリプトの $drive = 'C:' を変更(KAPE は --tsource)。
  • BitLocker:ライブ収集では復号済みデータを読みますが、暗号化ディスクのイメージは $MFT を取り出す前に回復キーでロック解除が必要です。
仕組み

この MFT パーサーについて

MFT パーサーとは、NTFS の Master File Table——すべての NTFS ボリュームの先頭にある $MFT ファイル——を読み取り、その 1,024 バイトのレコードをフォレンジック アナリストが扱える形式に変換するツールです。ファイル名、タイムスタンプ、親ディレクトリ、代替データ ストリーム、削除済みエントリ、レジデント データなどを取り出します。本サイトはそうしたパーサーの一つで、ブラウザ内で動作します。

$MFT ファイルを上のエリアにドロップしてください。ファイルはブラウザのメモリに読み込まれ、WebAssembly にコンパイルされた Rust クレート omerbenamram/mft によって解析され、ページネーション付きの検索可能なテーブルとして表示されます。アップロードは行いません——ドロップ前にネットワークを切断すれば確認できます。後続の分析向けに CSV エクスポートとトリアージ レポートも用意しています。

表示される内容

  • 割り当て済みか削除済みかにかかわらず、すべての MFT レコードと in-use フラグの状態。
  • 2 つのタイムスタンプ群——$STANDARD_INFORMATION と $FILE_NAME——により、 タイムストンピング を一目で検出できます。
  • 各レコードに紐付く代替データ ストリーム(Zone.Identifier を含む)。
  • 小さなファイルのレジデント $DATA バイト——削除後に復元できる唯一のバージョンであることが多くあります。
  • テーブル内の親参照を辿ることによる、完全なフル パス再構築。

他の MFT パーサーとの比較

Windows の分析ワークステーションでは、 MFTECmd が標準の CLI で、Timeline Explorer や KAPE が想定する CSV を出力します。Linux でのスクリプティングには、CLI とRust クレート omerbenamram/mft が JSON Lines を出力します。本ブラウザ パーサーは三番目の選択肢を埋めます——インストール不要、ブラウザが動くところならどこでも動作し、迅速なトリアージや、証拠をクラウド サービスに送信できない状況に適しています。詳しい比較は記事 MFT パーサー比較にあります。

解析する $MFT を入手する

$MFT は Windows が実行中はロックされています。コピーを抽出するには、ライブ システム上で fsutil を使うか、ディスク イメージ(E01、dd、VMDK、VHD)からブラウザーで書き出すなら Disk Image Parser を使うか、フル トリアージ収集には KAPE の MFT ターゲットを使います。手順は 実行中の Windows システムから $MFT を抽出する方法を参照してください。

FAQ

フォレンジック FAQ

NTFS、$MFT、そしてこのパーサーが証拠をどう扱うかについての明快な回答。

フォレンジックノートを読む
Master File Table とは何ですか?

Master File Table($MFT)は NTFS のメタデータ インデックスです。ボリューム上のすべてのファイルとディレクトリは、$MFT 内に少なくとも 1 つの 1,024 バイトのレコードを持ち、名前・属性・タイムスタンプ・データのディスク上の位置が記述されています。

MFT は何の略ですか?

MFT は Master File Table の略です。ディスク上では $MFT と書かれます — ドル記号は NTFS のメタデータ ファイルの慣例的な接頭辞です。

Master File Table にはどのファイル属性が保存されますか?

すべてのレコードは $STANDARD_INFORMATION(タイムスタンプ、DOS フラグ)、$FILE_NAME(名前と 2 組目のタイムスタンプ)、$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 スレッドで実行されます。メモリ使用量はファイル サイズに比例します。複数ギガバイトの $MFT もモダン ブラウザで動作しますが、メモリへの初期読み込みには少し時間がかかります。

$MFT を数秒でデコード。

アカウント不要、インストール不要、アップロード不要。ファイルをドロップするか、合成サンプルから試せます。