0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

備忘録1:バイナリ解析1 バイナリとは

Posted at

バイナリ

バイナリとは
バイナリ(binary)とは2進法のことです。デジタルコンピュータが扱う全ての データはバイナリデータです。ファイルに保存されるデータや通信パケットなどは、 バイナリデータとして読み書きされたり送受信されたりします。
バイナリデータとテキストデータ
バイナリデータであっても、ASCIIやUnicodeなどの文字コードに対応したデータ のことをテキストデータといいます。テキストデータは人間が見て認識できるデー タです。

image.png

ビットとバイト

ビット
ビット(bit)は2進数の1桁のことです。ビットはbinary digitの略です。 ビットは情報の最小単位です。1ビットで1か0の2つの状態を表現できます。 2bitでは00、01、10、11の4つの状態、3bitでは000、001、010、011、100、 101、110、111の8つの状態を表現できます。nビットで2nの状態を表現できます。
ビットと数値
ビットの集まりを2進数と考えると、数値として捉えることができます。 たとえば、10(2)は2(10) 、11(2)は3(10) 、100(2)は4(10) 、101(2)は5(10) のように、 2進数を10進数に変換して対応させることができます。
バイト
ビットを8個集めた単位をバイト(byte)といいます。1バイトは8ビットなので、 00000000~11111111までの256個の状態を表現できます。正の整数値と考えると、 0~255を、負の数も考慮すると-128~+127を表現することができます。

16進数

N進数
1桁にN個の数字を使うのがN進数です。2進数は0と1の2個、8進数は0~7の8個、 10進数は0~9の10個の数字を使います。N個の数字で表せない時に桁上がりします。
16進数
10進数より大きいN進数では数字が0~9では足りません。そのため、16進数では AからFまでの6個のアルファベットを数字の代用にします。 16進数のaは10進数の10、bは11、cは12、dは13、eは14、fは15になります。 ※ a~fは、大文字のA~Fでもかまいません。
16進数の表記方法
16進数は、数値の先頭に0xを付加して、0x1、0xa、0x3bのように表記することが あります。0h、0ah、3bhのように末尾にhを付加して表記することもあります。 (a~fで始まる数値は先頭に0を付加します)。 ※ 0xは0X、hはHのように、大文字で表記してもかまいません。

バイナリファイル

バイナリファイル
テキストデータを格納したファイルをテキストファイルといいます。 テキストデータはバイナリデータの一種なので、テキストファイルを含む全ての ファイルはバイナリファイルです。
バイナリファイルの種類
バイナリファイルには次のような種類があります。 ⚫ 画像ファイル ⚫ オーディオファイル ⚫ 動画ファイル ⚫ アーカイブファイル ⚫ 圧縮ファイル ⚫ アプリケーションデータファイル ⚫ 実行形式ファイル
ビューワ
バイナリファイルを表示するためには、対応するビューワ(viewer)を使用します。

ファイルフォーマット

ファイルフォーマットとは
ファイルフォーマットは、ファイルを保存する形式のことです。ファイルフォーマッ トはファイルの種別と考えることもできます。 ファイルフォーマットには、ISOやJISなどの標準化団体が制定した規格や、特定の OSやアプリケーション用に独自に定められた規格があります。
ヘッダ情報
フォーマットによっては、ファイルの先頭にファイルのメタ情報を格納することが あります。これをヘッダ情報といいます。
マジックナンバー
ファイルは拡張子によって種別を判断できる場合もありますが、完全ではありません。 ファイルの種別をあらわすために、ファイルの先頭に格納された数バイトのデータを マジックナンバー(magic number)といいます。

image.png

ダンプ

ダンプ
データの解析や修復のために、ファイルやメモリの内容を出力することをダンプ (dump)といいます。ダンプの出力先はファイルや画面などです。 バイナリファイルをダンプすることを、バイナリダンプといいます。 バイナリダンプでは16進数を用いるのが一般的です。
odコマンド
od(octal dump)コマンドは、バイナリファイルの内容を8進数や16進数でダンプ するコマンドです。ASCIIコードに対応する文字を表示することもできます。 odコマンド以外に、hexdumpコマンド、xxdコマンドでダンプすることもできます。 xxdコマンドは-bオプションを指定することで、2進数でダンプすることができます。
[odの実行例]
odはオプションを指定しないと8進数でダンプする

image.png

-Axでアドレスを16進数、-txでデータを16進数でダンプする
image.png
リトルエンディアンなのでバイトが逆順で表示される

-t1でデータを1バイトずつ、-tzでASCIIコードを表示する
image.png
対応するASCII文字 文字として表示できない場合ドットで表示される

[hexdumpとxxdの実行例]
hexdumpで16進数ダンプする(-C オプションはASCIIコードも表示する)
$ hexdump -C random.dat
00000000 f5 38 56 16 32 6c 35 bc cc ac 23 c3 e8 3b 1b 7b |.8V.2l5...#..;.{|
00000010 ab 4b 13 e7 bd c3 7e 19 7d 43 41 07 6e 37 71 e7 |.K....~.}CA.n7q.|
00000020

xxdで16進数ダンプする(ASCIIコードも表示される)

$ xxd random.dat
00000000: f538 5616 326c 35bc ccac 23c3 e83b 1b7b .8V.2l5...#..;.{
00000010: ab4b 13e7 bdc3 7e19 7d43 4107 6e37 71e7 .K....~.}CA.n7q. 13 e7 bd c3 7e 19 7d 43 41 07 6e 37 71 e7 |.K....~.}CA.n7q.|
00000020

xxdで2進数ダンプする(-b オプションは2進数でダンプする)

00000000: 11110101 00111000 01010110 00010110 00110010 01101100 .8V.2l
00000006: 00110101 10111100 11001100 10101100 00100011 11000011 5...#.
0000000c: 11101000 00111011 00011011 01111011 10101011 01001011 .;.{.K
00000012: 00010011 11100111 10111101 11000011 01111110 00011001 ....~.
00000018: 01111101 01000011 01000001 00000111 01101110 00110111 }CA.n7
0000001e: 01110001 11100111
[odによるマジックナンバーの確認]
ELF形式(Linuxの実行形式)
$ od -Ax -tx1z what-1 | head -1
000000 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 >.ELF............<
ZIP圧縮形式
$ od -Ax -tx1z what-2 | head -1
000000 50 4b 03 04 14 00 00 00 08 00 55 50 44 4e ea f3 >PK........UPDN..<
PNG画像形式
$ od -Ax -tx1z what-3 | head -1
000000 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 >.PNG........IHDR<
GZIP圧縮形式
$ od -Ax -tx1z what-6 | head -1
000000 1f 8b 08 08 ab de 4d 5c 00 03 6c 65 61 66 2e 70 >......M¥..leaf.p<
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?