復習 ここはどこ?

SECCON 2014 online予選の復習 その2。
フォレンジックスの100点問題です。

ここはどこ?

という問題文と、ファイルが1つ。
[bash]
$ file Forensicist.dat
Forensicist.dat: RFC 822 mail text
[/bash]
ファイルの中身はどうやらメール形式のようなのでThunderbirdとかのメールソフトに読ませます。

seccon_2014_Forensic100_1{.alignnone .size-medium .wp-image-1032 width=“300” height=“144” sizes="(max-width: 300px) 100vw, 300px" srcset=“https://ie.u-ryukyu.ac.jp/e095708/files/2014/01/seccon_2014_Forensic100_1-300x144.png 300w, https://ie.u-ryukyu.ac.jp/e095708/files/2014/01/seccon_2014_Forensic100_1-900x433.png 900w, https://ie.u-ryukyu.ac.jp/e095708/files/2014/01/seccon_2014_Forensic100_1.png 958w”}

メールの本文に回答の形式、あと添付ファイルがついています。
添付ファイルを保存してファイル形式の確認。
[bash]
$ file panda
panda: TIFF image data, little-endian
[/bash]

イメージファイルであることと「ここはどこ?」という問題文から画像の詳細情報を調べればおそらくGPS情報とかあるだろう、って推測できました。
実際にGPS情報が付加されていて、それをGoogleMapで検索かけると
「TAIPEI ZOO」と出てきました。

しかし、これを入力しても正解ではなく、
「Taipei Zoo」
と入力して正解となりました。

Mapだと「TAIPEI ZOO」でしたけど、Street Viewで見ると「Taipei Zoo」だったんですよね…。
何はともあれ解けて良かったです。

メールソフトを使わないで

なんとなくやってみます。
普段はGmailで、D&Dしても添付ファイル取れなかったので。

頭の20行ほど読んでみます。
[bash]
$ nkf -w Forensicist.dat | head -n 20
Received: (qmail 32744 invoked from network); 02 Feb 2012 02:02:02 -0000
From: hogehoge@example.com
Content-Type: multipart/mixed; boundary="0123456789_=_0123456789"
Date: Fri, 02 Feb 2012 02:02:02 +0000
Subject: ここはどこ
To: fugafuga@example.com

–0123456789_=_0123456789
Content-Type: text/plain;
charset="iso-2022-jp"
Content-Transfer-Encoding: 7bit

答: ○○○○○○ ○○○

–0123456789_=_0123456789
Content-Type: application/octet-stream;
name="panda"
Content-Transfer-Encoding: base64
Content-ID: <panda.tif@0123456789.ABCDEFG>

[/bash]
ってことでメール本文は読めました。
問題は添付ファイルな部分です。

添付ファイルjpegでしたのでバイナリですし、BASE64エンコードされています。
lessとかで見ても下の画像のようになります。
seccon2014_Forensic100_2{.alignnone .size-medium .wp-image-1035 width=“226” height=“300” sizes="(max-width: 226px) 100vw, 226px" srcset=“https://ie.u-ryukyu.ac.jp/e095708/files/2014/01/seccon2014_Forensic100_2-226x300.png 226w, https://ie.u-ryukyu.ac.jp/e095708/files/2014/01/seccon2014_Forensic100_2-680x900.png 680w, https://ie.u-ryukyu.ac.jp/e095708/files/2014/01/seccon2014_Forensic100_2.png 898w”}

つまりやりたいことは、
・BASE64エンコードされた部分を抜き出して
・1行にして
・デコードする
という3つです。

[bash]
$ ( cat Forensicist.back | tr -d "\r" | awk -v RS="" ‘NR==5 {print}’ | tr -d "\n" && echo ) > Forensicist.base64
$ base64 -d Forensicist.base64 > Forensicist.jpg
$ file Forensicist.jpg
forensic.jpg: TIFF image data, little-endian
[/bash]

odで見てたら改行コードが0x0d0aだったからちょっと引っかかりましたけど…。
あと最後のechoは要らないですね。

添付ファイルの取得までできました。
あとは、疲れたのでやっぱりプレビュー使ってやりましたw

http://www2.airnet.ne.jp/~kenshi/exif.html
http://photo.stackexchange.com/questions/27719/what-does-gpsinfoifdpointer-5438-mean
とか見ながら粘れば解けるかも?