Zuck3r’s Study

エンジニアではありません

Google CTF : Beginners Quest : OCR IS COOL!

前回と同じ前置きになるが、間違っているところや改善点があったらコメントして欲しい。

環境:VMware,DebianベースのLinuxを使っている

解説

今回は、"Google CTF : Beginner Quest : OCR IS COOL!"を解いていく。前回と同じ手順だ。リンクから飛び、"Attachment"から問題ファイルをダウンロードする。問題内容を端折って説明すると、訳の分からくなったファイルをオリジナルに修復しろとの事。問題の題名、OCRと問題文の初めの方にあるCaesarが鍵を握っていそうな気がする。

f:id:Zuck3r:20181215230347p:plain

それでは問題ファイルをダウンロードしたディレクトリにターミナルを使い移動する。前回と同様"file"でどんなファイルなのかを確認する。

$ file 7ad5a7d71a7ac5f5056bb95dd326603e77a38f25a76a1fb7f7e6461e7d27b6a3
7ad5a7d71a7ac5f5056bb95dd326603e77a38f25a76a1fb7f7e6461e7d27b6a3: Zip archive data, at least v2.0 to extract

これも前回と同様zipファイルであることが分かる。なので"unzip"で展開する。(今回もファイル名を変える、"mv"でファイル名をquest2.zipに変えた。)

$ unzip quest2.zip
Archive: quest2.zip
extracting: OCR_is_cool.png

展開すると、png形式のファイルであることが分かる。"eog"を使いOCR_is_cool.pngを開く。

f:id:Zuck3r:20181216001048p:plain

OCR_is_cool.png



上のような画像が出た。これは見るからにGmailである。だが、このメールの文章メチャクチャだ。問題の題名にOCRとつくくらいなのでOCRを使うのだろう。"file"でこのファイルの情報を調べると1919 x 1079でこの画像が小さい。OCRが使えるように"convert"を使いサイズを3倍にしてoutput.pngとして保存する。一応サイズが変わったことを確認するためoutput.pngにも"file"を使う。ちゃんと、5757 x 3237となり大きくなっている。

$file OCR_is_cool.png
OCR_is_cool.png: PNG image data, 1919 x 1079, 8-bit/color RGB, non-interlaced
$ convert OCR_is_cool.png -scale 300% output.png
$ file output.png
output.png: PNG image data, 5757 x 3237, 8-bit/color RGB, non-interlaced

この画像ファイルをOCRにかける。OCRするためのコマンドは"tesseract"だ。おそらくないと思うのでインストールしよう。

$ sudo apt-get install tesseract-ocr

output.png"tesseract"を使う結果はresultというファイル名にした。

$ tesseract output.png result
$Tesseract Open Source OCR Engine v4.0.0 with Leptonica
Warning: Invalid resolution 0 dpi. Using 70 instead.
Estimating resolution as 347

"ls"を使えばresult.txtというファイルが出来ている事が分かるだろう。(ここは省略する)次は"cat"でresult.txtの内容を表示する。Warningが出ているが、読み取れず幾つか別の文字に置き換えましたみたいなメッセージだろう。(違うかもしれないけど)

$ cat result.txt
Oe ela lel em Olea
era «ee 4
€ C | 0 https://mail.google.com/mail/u/0/#inbox/FMfogxewzlcZvxhVzdDbgXzfjKxvppDv
 mM Gmail Q. Search mail ~ sf oO
¢ © O 8 © o eB : 1of 1 a om
= Compose
Your iDropDrive is ready _ inbox « = @
CJ = Inbox
%® = Starred Q iDropDrive team <iDropDrive@ctfcompetition.com= Jun 23, 2018,9:08AM yy : @
(途中省略)
Atiir bWkhiWkbobgz!
No recent chats # Reply m@ Forward
Start a new one
9%

良くわからない文章が出て来たが、まぁ、先ほどのOCR_is_cool.pngOCRで読み込んだだけなので当然だ。ブログ冒頭で言ったがここでCaesarが鍵になる。おそらく、シーザー暗号なのだろう。この問題の答えは"CTF{・・・・}"という事が分かっている。"{" "}"は暗号化されないのでこのカッコに囲まれている場所探す。
すると、"VMY¥{vtaltkvbiaxkbitinulmbmnmbhgvbiaxk} "が見つかった。こいつは臭う!!
ここで、再度OCR_is_cool.pngを開き文字列を確認だ。すると、"VMY{vtxltkvbiaxkbltlnulmbmnmbhgvbiaxk}"であることが分かった。下のサイトにあるデコードプログラムを私は利用した。Pythonには元からrot13が実装されているので便利だ。
(Pythonでシーザー暗号解読ツールを自作しよう | Muroi Log)

f:id:Zuck3r:20181216023450j:plain

VMY{vtxltkvbiaxkbltlnulmbmnmbhgvbiaxk}のデコード結果


デコードされた結果を上から順に見ていくとCTF{・・・}という形式の文字列があるそれが今回のフラッグだ。

終わりに

今回で2回目だが、結構疲れました…OCRって完璧では無いのである程度まで絞ったら自分でチェックしないといけないなと今回の問題で感じました。rot13コマンド(sudo apt install bsdgamesを使った後に、"$ man rot13”までは出たのだが…)が何故か動かないという不具合が出たので急遽pythonのプログラムを使っている。

参考にした動画(Google CTF: Beginner Quest: OCR IS COOL! (Simple Cryptography) - YouTube)

気になったら調べておくといいかもなワード

  • OCR
  • シーザー暗号
  • rot13