バイナリ・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文字列 |
| 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キーでそのセルの編集をキャンセルできます。
- バイナリプロトコルのデバッグでは、期待する値と実際に送受信されたバイト列をこのツールで並べて比較すると、ズレている箇所を特定しやすくなります。
よくある質問
FF D8 FF ならJPEG画像である可能性が高い、といった判定ができます。
余談ですが ― なぜファイルの正体は拡張子ではなくバイト列でわかるのか
Windowsのファイル拡張子は、OSに「このファイルをどのアプリで開くか」を伝えるためのヒントに過ぎず、ファイルの中身とは独立した文字列です。そのため `.txt` を `.jpg` にリネームしても画像として開けるようにはならず、逆に本物の画像ファイルの拡張子を消してもデータ自体は画像のまま残ります。この「自己申告に過ぎない」性質を悪用し、実行ファイルを画像や文書に偽装するマルウェアの手口も古くから知られています。
これに対し、多くのファイル形式は先頭数バイトに固有の識別子(マジックバイト、マジックナンバーとも呼ばれる)を埋め込む設計になっています。PNGなら `89 50 4E 47 0D 0A 1A 0A` の8バイトが必ず先頭に来る、というように、形式ごとに決まったパターンが仕様として定められているため、OSやアプリケーションはファイルの中身を実際に読み取って初めて「これは本当にPNGか」を確認できます。Unix系OSの `file` コマンドやブラウザのMIMEタイプ判定も、拡張子ではなくこのマジックバイトの照合を主な判定根拠にしています。
マジックバイトの設計には歴史的な工夫も見られます。例えばPNGの8バイトには意図的に改行コード(0D 0A)が含まれており、これはテキストモードでファイルが転送された際に改行コードが変換されて壊れていないかを検知するためのものです。単なる識別子ではなく、転送過程での破損検知まで兼ねた設計になっている点は、バイナリフォーマットの奥深さを感じさせます。