はじめに
本記事はバイナリファイルを表示したり、編集するための方法について記載しています。
バイナリファイルを表示・編集するためには、バイナリエディタを使用します。
バイナリエディタは、プラットフォームに応じて色々な種類がありますが、本記事ではLinuxを例に記載しています。
バイナリファイルの表示・編集
Linuxの場合は、以下に記載している外部コマンドを用いてバイナリファイルの表示・編集を行うことができます。
hexeditorは、Kaliにインストールされているncurses-hexeditパッケージです。
xxd
xxdコマンドは、指定されたファイルまたは標準入力を16進ダンプで出力します。
また16進ダンプを元のバイナリ形式に変換することもできます。
左からファイルの中の位置、 中央がバイナリデータを16進数で表示、 一番右がバイナリデータをASCIIに変換して表示します。
$ xxd <ファイル名>
00000000: 8950 4e47 0d0a 1a0a 0000 000d 4948 4452 .PNG........IHDR
00000010: 0000 0500 0000 02d0 0806 0000 00cf 7ddd ..............}.
00000020: 5600 0000 0970 4859 7300 000b 1200 000b V....pHYs.......
00000030: 1201 d2dd 7efc 0000 2000 4944 4154 789c ....~... .IDATx.
00000040: ecbd 59ac 2cc9 79e7 f745 66d6 5e67 bdcb ..Y.,.y..Ef.^g..
00000050: b97d 7b21 7b21 7be7 228a 4d71 196e 92b5 .}{!{!{.".Mq.n..
00000060: 5883 3104 db33 b635 9e01 ec37 db30 fcee X.1..3.5...7.0..
00000070: 078f 013f f8c1 f330 b601 1b03 5bc6 c0c0 ...?...0....[...
00000080: 6830 d658 06a9 9148 5122 25b2 458a dd5c h0.X...HQ"%.E..\
00000090: ba9b bdb0 9bbd f7dd efd9 b75a 7209 e3ff ...........Zr...
od
odコマンドは、指定されたファイルを指定されたフォーマットで表示することができます。
ファイルを指定しない場合、od
コマンドは標準入力をダンプします。
ファイルのマジックナンバーなどを調査する場合などに活用できます。
オプションを複数使用することで、複数のタイプが指定できます。
出力フォーマットは-t
フラグで指定し、フォーマットのタイプを指定しない場合は、-t o2
がデフォルトとして使用されます。
16進数及びビッグエンディアンかつASCII文字で表示する場合は、以下のコマンドを実行します。
$ od -tx1c <ファイル名>
0000000 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52
211 P N G \r \n 032 \n \0 \0 \0 \r I H D R
0000020 00 00 05 00 00 00 02 d0 08 06 00 00 00 cf 7d dd
\0 \0 005 \0 \0 \0 002 320 \b 006 \0 \0 \0 317 } 335
0000040 56 00 00 00 09 70 48 59 73 00 00 0b 12 00 00 0b
V \0 \0 \0 \t p H Y s \0 \0 \v 022 \0 \0 \v
0000060 12 01 d2 dd 7e fc 00 00 20 00 49 44 41 54 78 9c
022 001 322 335 ~ 374 \0 \0 \0 I D A T x 234
0000100 ec bd 59 ac 2c c9 79 e7 f7 45 66 d6 5e 67 bd cb
354 275 Y 254 , 311 y 347 367 E f 326 ^ g 275 313
vim
vimは、バイナリファイルの編集も行うことができます。
バイナリモードで編集したい場合は、-b
を指定してバイナリモードでファイルを開きます。
$ vi -b <ファイル名>
ダンプ形式の表示に変更するためには、:%!xxd
を押します。
00000000: 8950 4e47 0d0a 1a0a 0000 000d 4948 4452 .PNG........IHDR
00000010: 0000 0500 0000 02d0 0806 0000 00cf 7ddd ..............}.
00000020: 5600 0000 0970 4859 7300 000b 1200 000b V....pHYs.......
00000030: 1201 d2dd 7efc 0000 2000 4944 4154 789c ....~... .IDATx.
00000040: ecbd 59ac 2cc9 79e7 f745 66d6 5e67 bdcb ..Y.,.y..Ef.^g..
00000050: b97d 7b21 7b21 7be7 228a 4d71 196e 92b5 .}{!{!{.".Mq.n..
00000060: 5883 3104 db33 b635 9e01 ec37 db30 fcee X.1..3.5...7.0..
00000070: 078f 013f f8c1 f330 b601 1b03 5bc6 c0c0 ...?...0....[...
00000080: 6830 d658 06a9 9148 5122 25b2 458a dd5c h0.X...HQ"%.E..\
00000090: ba9b bdb0 9bbd f7dd efd9 b75a 7209 e3ff ...........Zr...
編集後にこの状態のまま保存すると、テキストとして保存されるため、最後に:%!xxd -r
を実行したあとにwq
を押して保存します。
%!
でvi実行時に、他のコマンドを実行することができるので、xxd -r(-revert)
コマンドを実行して16進数ダンプ及びバイナリ変換を行なっています。
hexeditor
hexeditorは、ファイルを16進数で表示及び編集ができるバイナリエディタです。
以下のコマンドを実行して、ファイルを開いて編集します。
$ hexeditor <ファイル名>
編集して保存する場合は、^X
を押して終了します。
変更せずに終了する場合は、^C
を押します。
おわりに
Kaliには上記hexeditor以外でも16進数で表示可能なバイナリエディタがあります。