はじめに
こんにちは!今回はhexdumpコマンドについて解説します。
hexdumpはファイルの内容を16進数(HEX)で表示するコマンドです。バイナリファイルを確認したり、ファイルの内部構造を調査したり、データが正しく保存されているか検証したりするときに使います。
「ファイルの中身を16進数で見る」って感じのコマンドですね。デバッグやセキュリティ調査でめっちゃ便利ですよ。
hexdumpコマンドとは
hexdumpは、ファイルの内容を16進数形式で表示する外部コマンドです。“hexadecimal dump"の略ですね。
バイナリファイルのダンプ表示、ファイルの整合性確認、プロトコル解析など、低レベルのデータ操作が必要な時に活躍します。複数の表示形式(16進数、8進数、10進数、ASCII)に対応していて、かなり柔軟に使えます。
基本構文
|
|
ファイルの内容を16進数で表示します。標準入力からのデータも受け取れます。
主なオプション
| オプション | 説明 |
|---|---|
-C |
標準的な16進数+ASCII表示(最もよく使う) |
-x |
2バイト単位の16進数表示 |
-b |
1バイト単位の8進数表示 |
-d |
2バイト単位の10進数表示 |
-v |
すべての行を表示(同じパターンも表示) |
-n NUM |
最初のNUMバイトのみダンプ |
-s OFFSET |
OFFSETバイト目からダンプ開始 |
-A x |
アドレス部分を16進数表示 |
-A d |
アドレス部分を10進数表示 |
-A o |
アドレス部分を8進数表示 |
使用例
例1: 基本的なHEXダンプ表示
|
|
実行結果:
|
|
Helloの内容を16進数で表示。各バイトが16進数で、右側にASCII表示が出ます。0aは改行コードですね。
例2: ファイル全体をダンプ
|
|
実行結果:
|
|
ホストネームファイルの内容を表示。このシステムでは"ubuntu"が設定されているんですね。
例3: 最初の16バイトだけ表示
|
|
実行結果:
|
|
lsコマンドの最初の16バイト。7f 45 4c 46はELFバイナリのマジックナンバー(シグネチャ)です。
例4: オフセット付きダンプ
|
|
実行結果:
|
|
0x100(256バイト目)からダンプを開始。指定した位置からのデータを確認できます。
例5: 2バイト単位の16進数表示
|
|
実行結果:
|
|
2バイト単位で16進数表示。4241は"AB”、4443は"CD"ですね。
例6: 8進数表示
|
|
実行結果:
|
|
1バイト単位で8進数表示。101は’A’(8進数)です。
例7: 10進数表示
|
|
実行結果:
|
|
2バイト単位で10進数表示。16進数を10進数で見ると、こんな数値になります。
例8: バイナリファイルの整合性確認
|
|
実行結果:
|
|
画像ファイルの先頭20行を表示。89 50 4e 47はPNGファイルのシグネチャですね。
例9: 改行を含むテキストファイル
|
|
実行結果:
|
|
改行は0aで表示されます。複数行のテキストの構造を確認できます。
例10: 重複行も含めて表示
|
|
実行結果:
|
|
通常は同じパターンが*で表示されますが、-vで全行を表示できます。大きなファイルで便利。
Tips・注意点
hexdumpがない場合の代替案
環境によってはhexdumpがインストールされていないことがあります。その場合:
|
|
-Cオプションが最も便利
|
|
16進数とASCII両方が同時に見られるので、これを基本にするといいですよ。
大きなファイルはパイプでフィルタ
|
|
headやgrepと組み合わせると、探しているデータを素早く見つけられます。
ファイルサイズの確認
|
|
最後の行を見れば、ファイルサイズが分かります。
実践的な使い方
バイナリファイルのシグネチャ確認
|
|
PDFファイルは25 50 44 46(%PDF)で始まります。ファイルの種類を判定できます。
ネットワークダンプの解析
|
|
ネットワークキャプチャをダンプ表示して、パケット内容を確認。プロトコル解析に便利ですね。
暗号化ファイルの検証
|
|
暗号化されたファイルが正しく保存されているか、16進数ダンプで見て確認できます。
スクリプトでの使用例
|
|
ファイルの先頭バイトでファイル形式を判定するスクリプト。ELFバイナリ判定ですね。
まとめ
hexdumpコマンドのポイント:
- 16進数ダンプ表示 - バイナリファイルの内容を確認
- -C: 最も便利な形式(16進数+ASCII同時表示)
- -n: 先頭のNバイトだけ表示
- -s: 指定位置からダンプ開始
- -x, -b, -d: 異なる形式(2バイト16進数、8進数、10進数)
- -v: すべての行を表示(デフォルトは重複行を省略)
- よく使う組み合わせ:
hexdump -C,hexdump -C -n 16
ファイルの内部構造を深く理解したい時、バイナリ解析をする時に活躍するコマンド。16進数が読めるようになると、ファイル形式の仕組みが見えてきて面白いですよ!