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ディレクトリが生成されていないことが確認でき、ファイル抽出ができていないことが分かる。