@port139 Blog

基本的にはデジタル・フォレンジックの技術について取り扱っていますが、記載内容には高確率で誤りが含まれる可能性があります。

PDFファイルと添付ファイル

PDF にはファイルを添付する機能がありますが、この機能を使って PDF ファイルに画像ファイルが添付されている場合、どう検出するかをフォレンジック調査サンプルマインドマップに追加しておこうと思ったので、PDFHACKS 本のP244 辺りを読みながら pdftk ツールを使って実験。

PDFTK
http://www.accesspdf.com/pdftk/

PDFファイルにJPEG画像ファイル(Penguins.jpg)を添付する場合のコマンドライン
pdftk test001.pdf attach_files Penguins.jpg output test002.pdf

この場合、添付されている JPEG 画像ファイルはストリーム内で圧縮されているので、\xFF \xD8 などのパターンや JFIF といった文字列を使ったバイナリ検索ではヒットしてくれない。ただし、添付したファイル名や拡張子(.jpg)とかを ASCII と UTF-16LE で検索することでそれらはヒットしますが、名前や拡張子が変更されている場合には一致してきません。
PDFファイルの圧縮を解除した後であれば、\xFF \xD8 や JFIF といったパターンでも検出できるのですが、圧縮を伸張する手間が必要になります。

PDFファイルの圧縮を伸張するコマンドライン
pdftk test002.pdf output test003un.pdf uncompress

PDFにファイルが添付されている場合、PDFファイル内では /EmbeddedFiles が指定されているので、これをキーワード検索するということで、添付ファイルがあるPDFを簡単に検出できそうですが、/EmbeddedFiles が添付ファイル以外でも使われるケースがあるかは要確認です。

PDFファイルの添付ファイルをカレントフォルダに出力するコマンドライン
pdftk test002.pdf unpack_files output
pdftk test002.pdf unpack_files output FolderName
pdftk test002.pdf unpack_files output PROMPT

ファイル毎に出力先フォルダを指定しないと、どの添付ファイルがどのPDFファイルのかわからなくなってしまいますね。オプションとしては、フォルダパスを指定しておく、保存先パスを指定するプロンプトを表示するように PROMPT オプション使えます。