バイナリ・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エディタとは
あらゆるファイルは、突き詰めればバイトの並びです。Hexエディタはその中身を1バイトずつ16進数で表示し、必要なら直接書き換えられるツールです。とくに先頭の数バイトには形式を示すマジックバイトが入っていることが多く、拡張子を信用せずに本当の形式を判別できます。
このツールはファイルをドロップするか、16進数を直接入力して読み込めます。表示・編集・ダウンロードのすべてがブラウザ内で完結し、内容がサーバーへ送られることはありません。ただしサイズが大きいファイルは先頭64KBのみを対象とし、それ以降はダウンロード時にも保持されない点に注意してください。
Hexエディタの使い方
- ファイルを読み込む ファイルをドロップするか、16進数を直接貼り付けて読み込みます。スペースや改行は無視されます。
- 先頭バイトを確認する オフセット0付近を見れば、下の一覧と照らして本当のファイル形式を判別できます。
- バイトを書き換える 16進数のセルをクリックすると、そのバイトを00〜FFの値で編集できます。ASCII欄も同時に更新されます。
- 編集結果をダウンロードする 書き換えた内容をファイルとして保存できます。元のファイルは変更されないため、実験的な編集も安全に試せます。
使いこなすためのヒント
- 拡張子を書き換えられたファイルの正体を見破りたいときは、先頭数バイト(マジックバイト)を上の一覧表と照合してください。拡張子は自己申告に過ぎませんが、マジックバイトはファイル形式そのものに由来するため偽装しにくい判定材料になります。
- 16進数を直接入力するモードでは、他のツールからコピーしたバイト列(スペース区切り・改行区切りいずれも可)をそのまま貼り付けて読み込めます。
- 編集中に誤ったセルをクリックした場合は、Escキーでそのセルの編集をキャンセルできます。
- バイナリプロトコルのデバッグでは、期待する値と実際に送受信されたバイト列をこのツールで並べて比較すると、ズレている箇所を特定しやすくなります。
Hexエディタの活用シーン
拡張子を偽装したファイルを見破る
先頭バイトを確認すれば、拡張子と実際の形式が食い違っていないかが分かります。不審な添付ファイルの確認に使えます。
壊れたファイルの原因を調べる
ヘッダーが欠けているのか、途中で切れているのかをバイト列から判断できます。復旧できるかの見極めに役立ちます。
ファイル形式の仕様を学ぶ
仕様書と実際のバイト列を突き合わせながら読むと、ヘッダーの構造が具体的に理解できます。
テスト用の壊れたデータを作る
一部のバイトをわざと書き換えれば、異常なファイルを読ませたときの挙動を検証できます。
バイナリに関する用語
- バイト
- 8ビットをひとまとまりとした単位です。16進数では00からFFまでの2桁で表されます。
- マジックバイト
- ファイルの先頭に置かれた形式を示す固有のバイト列です。ファイルシグネチャとも呼ばれます。
- オフセット
- ファイルの先頭から何バイト目かを示す位置です。16進数で表記されるのが一般的です。
- ヘッダー
- ファイルの冒頭に置かれた、形式やサイズなどの情報をまとめた部分です。
- ASCII表示
- 各バイトを文字として解釈した表示です。文字列が埋め込まれている箇所を見つけるのに役立ちます。
- エンディアン
- 複数バイトの数値をどの順で並べるかの方式です。形式によって上位バイトが先か後かが異なります。
よくある質問
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)が含まれており、これはテキストモードでファイルが転送された際に改行コードが変換されて壊れていないかを検知するためのものです。単なる識別子ではなく、転送過程での破損検知まで兼ねた設計になっている点は、バイナリフォーマットの奥深さを感じさせます。