foremostによるファイル抽出
foremostは、バイナリデータに含まれるファイルを、ヘッダなどの情報をもとに抽出できるユーティリティである。Debian系のLinuxディストリビューションでは、次のコマンドでインストールできる。
$ sudo apt install foremost
ファイル抽出の練習として、pngファイルを用意し、それを適当なバイナリデータに埋め込む。
$ echo "AAAAAAAAAAAAAAAA" > test.bin
$ cat arowana.png >> test.bin
$ echo "BBBBBBBBBBBBBBBB" >> test.bin
$ file test.bin
$ xxd test.bin | head
test.binにarowana.pngが埋め込まれたので、foremostで抽出できるか確認してみる。
$ foremost -o result1 test.bin
result1ディレクトリが作成され、さらにそのディレクトリ下にpngディレクトリが作成された。 pngディレクトリの中に抽出されたpngファイルが格納されていることが分かる。
次に、pngファイルのヘッダが壊れた状態でforemostによる抽出を試みる。先ほどと同様のtest.binを使い、pngファイルの先頭1バイト目を壊してみる。test.binの17バイト目は改行コード(\x0a)であり、18バイト目を\x00としてみる。
$ printf '\x00' | dd of=test.bin bs=1 seek=17 conv=notrunc
$ xxd test.bin | head
$ foremost -o result2 test.bin
result2ディレクトリには、result1ディレクトリとは異なり、pngディレクトリが生成されていないことが確認でき、ファイル抽出ができていないことが分かる。