バイナリ・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エディタとは

あらゆるファイルは、突き詰めればバイトの並びです。Hexエディタはその中身を1バイトずつ16進数で表示し、必要なら直接書き換えられるツールです。とくに先頭の数バイトには形式を示すマジックバイトが入っていることが多く、拡張子を信用せずに本当の形式を判別できます。

このツールはファイルをドロップするか、16進数を直接入力して読み込めます。表示・編集・ダウンロードのすべてがブラウザ内で完結し、内容がサーバーへ送られることはありません。ただしサイズが大きいファイルは先頭64KBのみを対象とし、それ以降はダウンロード時にも保持されない点に注意してください。

Hexエディタの使い方

  1. ファイルを読み込む ファイルをドロップするか、16進数を直接貼り付けて読み込みます。スペースや改行は無視されます。
  2. 先頭バイトを確認する オフセット0付近を見れば、下の一覧と照らして本当のファイル形式を判別できます。
  3. バイトを書き換える 16進数のセルをクリックすると、そのバイトを00〜FFの値で編集できます。ASCII欄も同時に更新されます。
  4. 編集結果をダウンロードする 書き換えた内容をファイルとして保存できます。元のファイルは変更されないため、実験的な編集も安全に試せます。

使いこなすためのヒント

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

Hexエディタの活用シーン

拡張子を偽装したファイルを見破る

先頭バイトを確認すれば、拡張子と実際の形式が食い違っていないかが分かります。不審な添付ファイルの確認に使えます。

壊れたファイルの原因を調べる

ヘッダーが欠けているのか、途中で切れているのかをバイト列から判断できます。復旧できるかの見極めに役立ちます。

ファイル形式の仕様を学ぶ

仕様書と実際のバイト列を突き合わせながら読むと、ヘッダーの構造が具体的に理解できます。

テスト用の壊れたデータを作る

一部のバイトをわざと書き換えれば、異常なファイルを読ませたときの挙動を検証できます。

バイナリに関する用語

バイト
8ビットをひとまとまりとした単位です。16進数では00からFFまでの2桁で表されます。
マジックバイト
ファイルの先頭に置かれた形式を示す固有のバイト列です。ファイルシグネチャとも呼ばれます。
オフセット
ファイルの先頭から何バイト目かを示す位置です。16進数で表記されるのが一般的です。
ヘッダー
ファイルの冒頭に置かれた、形式やサイズなどの情報をまとめた部分です。
ASCII表示
各バイトを文字として解釈した表示です。文字列が埋め込まれている箇所を見つけるのに役立ちます。
エンディアン
複数バイトの数値をどの順で並べるかの方式です。形式によって上位バイトが先か後かが異なります。

よくある質問

はい。ファイルを読み込み、先頭バイトを上の「よく使われるファイルシグネチャ」一覧と照合してください。拡張子が `.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)が含まれており、これはテキストモードでファイルが転送された際に改行コードが変換されて壊れていないかを検知するためのものです。単なる識別子ではなく、転送過程での破損検知まで兼ねた設計になっている点は、バイナリフォーマットの奥深さを感じさせます。