バイナリとは
バイナリ(binary)とは2進数のこと。
IT分野におけるファイルに保存されるデータや通信パケットはバイナリデータでやり取りされる。
00, 01, 10, 11....
バイナリデータであっても、ASCIIやUnicodeなどの文字コードに対応したデータのことをテキストデータという。
[例]
gennkidesuka → 67 65 6E 6E 6B 69 64 65 73 75 6B 61
botibotidesu62 → 6F 74 69 62 6F 74 69 64 65 73 75
バイナリファイルの種類
- 画像ファイル
- オーディオファイル
- 実行形式ファイル(ELF)←よく解析対象になる
ダンプ
データの解析や修復のために、ファイルやメモリの内容を出力すること。
バイナリファイルをダンプすることを、バイナリダンプ。
16進数が一般的。
コマンド
- od(octral dump): バイナリファイルの内容を8進数や16進数でダンプする
- hexdump
- xxd
例
テストコード
print('Hello World')
ターミナル
% python3 test.py
Hello World
% od -Ax -tx1 test.py | head -1 // odで先頭の16バイトを16進数でダンプする
0000000 70 72 69 6e 74 28 27 48 65 6c 6c 6f 20 57 6f 72
表層解析
バイナリ解析
バイナリファイルのうち、主に実行形式ファイルを対象とした解析すること。
バイナリ解析の手法
手法は以下の3つ。
- 表層解析
- 動的解析
- 静的解析
取得できる情報量は静的解析が最も多高い。
表層解析
バイナリ解析で最初にやる解析。
デジタルフォレンジックの証拠収集にも使われる。
さくっと時間をかけずに調べる。
得られる情報は以下の通り。
- ファイルの名前
- ファイルのフォーマット
- ファイルのメタ情報
使用するコマンド
| コマンド | 機能 |
|---|---|
| file | ファイルフォーマットの出力 |
| strings | バイナリファイルないに含まれる文字列を抜き出す |
| grep, egrrep | パターン文字列を含む行を抽出して出力 |
| exitfool | 画像、音声、動画、PDFなど、様々なファイル形式のメタデータを読み書き、編集する |
| binwalk | 圧縮、アーカイブ、パックによってファイル内に埋め込まれているファイルを確認したり取り出したりする |