はてブロ@ama_ch

https://twitter.com/ama_ch

Python Challenge Level8

※ネタバレ有り

考え方

画像下に「Where is the missing link?」と書かれています。
んで、ソースを見てもわかりますが、画像のハチのあたりがリンクになっていて、IDとpassを求められます。これを見つける問題みたいですね。


ソースの1番下には、

<!--
un: 'BZh91AY&SYA\xaf\x82\r\x00\x00\x01\x01\x80\x02\xc0\x02\x00 \x00!\x9ah3M\x07<]\xc9\x14\xe1BA\x06\xbe\x084'
pw: 'BZh91AY&SY\x94$|\x0e\x00\x00\x00\x81\x00\x03$ \x00!\x9ah3M\x13<]\xc9\x14\xe1BBP\x91\xf08'
-->

という記述が。明らかにこいつがUsernameとPasswordじゃないか!
とりあえず何も考えないでこの文字列をコピペしたら、当然通りません。そりゃそうだよね、これで通ったらPythonいらないしw


他にヒントっぽいものはないので、この文字列をうにゃうにゃいじくれば良さそう。
よく見ると、unとpwの先頭部分が同じ文字列になっています。「BZh91AY&SY」?
実際の認証でunとpwが同じになるとは思えないから、この共通部分はファイルのヘッダ情報のようなものだと考えられます。恐らく、共通の圧縮方法とかエンコード方法なんだと予想しました。


でもこれだけだと何の形式なのかわからないので、「BZh91AY&SY」で検索してみた
どうもbz2圧縮ファイルのヘッダ情報らしい。
Python和訳ドキュメントを「bz2」で検索して、見つかったのが以下のページ。
http://www.python.jp/doc/release/lib/module-bz2.html
ここを参考に、いじってみます。

>>> import bz2
>>> un = 'BZh91AY&SYA\xaf\x82\r\x00\x00\x01\x01\x80\x02\xc0\x02\x00 \x00!\x9ah3M\x07<]\xc9\x14\xe1BA\x06\xbe\x084'
>>> pw = 'BZh91AY&SY\x94$|\x0e\x00\x00\x00\x81\x00\x03$ \x00!\x9ah3M\x13<]\xc9\x14\xe1BBP\x91\xf08'
>>> bz_un = bz2.BZ2Decompressor()
>>> bz_un.decompress(un)
'huge'
>>> bz_pw = bz2.BZ2Decompressor()
>>> bz_pw.decompress(pw)
'file'

出てきた文字列を認証ウィンドウに入力すると・・・次へ進みました!

感想

なんか凄く・・簡単というか、なんだろう、あっけなく終わってしまいました;