バイナリ・Hexエディタ|ファイルを16進数で確認・編集

ファイルをドラッグ&ドロップするだけで、中身をバイト単位の16進数(hex dump)で表示。マジックバイトによる本当のファイル形式の確認や、バイナリの直接編集・ダウンロードができます。ファイルはサーバーに送信されません。

よく使われるファイルシグネチャ(マジックナンバー)一覧

形式 先頭バイト(16進数) オフセット 備考
PNG 89 50 4E 47 0D 0A 1A 0A 0 画像ファイル。8バイトすべてが一致すれば確実にPNGと判定できる
JPEG FF D8 FF 0 画像ファイル。4バイト目はJFIF/Exif等の亜種により異なる
GIF 47 49 46 38 39 61 / 47 49 46 38 37 61 0 "GIF89a" または "GIF87a" のASCII文字列
PDF 25 50 44 46 2D 0 "%PDF-" のASCII文字列。直後にバージョン番号が続く
ZIP / docx / xlsx / jar 50 4B 03 04 0 ZIP形式。Office Open XML系や多くの圧縮・アーカイブ形式が内部的にZIPを使用
Windows実行形式(EXE/DLL) 4D 5A 0 "MZ" のASCII文字列。MS-DOS実行形式の名残であるPE形式のヘッダー
ELF実行形式 7F 45 4C 46 0 Linux等で使われる実行形式・共有ライブラリ

Hexエディタ活用のヒント

  • 拡張子を書き換えられたファイルの正体を見破りたいときは、先頭数バイト(マジックバイト)を上の一覧表と照合してください。拡張子は自己申告に過ぎませんが、マジックバイトはファイル形式そのものに由来するため偽装しにくい判定材料になります。
  • 16進数を直接入力するモードでは、他のツールからコピーしたバイト列(スペース区切り・改行区切りいずれも可)をそのまま貼り付けて読み込めます。
  • 編集中に誤ったセルをクリックした場合は、Escキーでそのセルの編集をキャンセルできます。
  • バイナリプロトコルのデバッグでは、期待する値と実際に送受信されたバイト列をこのツールで並べて比較すると、ズレている箇所を特定しやすくなります。

よくある質問

はい。ファイルを読み込み、先頭バイトを上の「よく使われるファイルシグネチャ」一覧と照合してください。拡張子が `.txt` でも先頭が FF D8 FF ならJPEG画像である可能性が高い、といった判定ができます。

数百MB〜数GB規模のファイル全体を一度に16進数表示すると、大量のDOM要素の生成によりブラウザが固まったり応答不能になったりするおそれがあるためです。先頭64KBに限定することで、ヘッダー情報の確認など主要な用途を安全に処理できるようにしています。

表示・編集対象が先頭64KBに切り詰められている場合、ダウンロードされるファイルもその64KB分のみになります(それ以降のデータは保持されません)。64KB以下のファイルであれば、編集箇所以外は元のデータと完全に同一のままダウンロードされます。

いいえ。ファイルの読み込み・16進数表示・編集・ダウンロードはすべてブラウザ内のJavaScriptだけで完結しており、ファイルの内容が外部に送信されることはありません。
ツールくん

余談ですが ― なぜファイルの正体は拡張子ではなくバイト列でわかるのか

Windowsのファイル拡張子は、OSに「このファイルをどのアプリで開くか」を伝えるためのヒントに過ぎず、ファイルの中身とは独立した文字列です。そのため `.txt` を `.jpg` にリネームしても画像として開けるようにはならず、逆に本物の画像ファイルの拡張子を消してもデータ自体は画像のまま残ります。この「自己申告に過ぎない」性質を悪用し、実行ファイルを画像や文書に偽装するマルウェアの手口も古くから知られています。

これに対し、多くのファイル形式は先頭数バイトに固有の識別子(マジックバイト、マジックナンバーとも呼ばれる)を埋め込む設計になっています。PNGなら `89 50 4E 47 0D 0A 1A 0A` の8バイトが必ず先頭に来る、というように、形式ごとに決まったパターンが仕様として定められているため、OSやアプリケーションはファイルの中身を実際に読み取って初めて「これは本当にPNGか」を確認できます。Unix系OSの `file` コマンドやブラウザのMIMEタイプ判定も、拡張子ではなくこのマジックバイトの照合を主な判定根拠にしています。

マジックバイトの設計には歴史的な工夫も見られます。例えばPNGの8バイトには意図的に改行コード(0D 0A)が含まれており、これはテキストモードでファイルが転送された際に改行コードが変換されて壊れていないかを検知するためのものです。単なる識別子ではなく、転送過程での破損検知まで兼ねた設計になっている点は、バイナリフォーマットの奥深さを感じさせます。

→ すべての余談を見る