ごちうさ映画の話 / SECCON 2017 Online CTFにでてみた話

 12月ということで人々がアドベントカレンダーに精を出しているのを眺めていると、もうタスクを積みたくないからとアドベントカレンダーに登録しなかった私であっても、やはりブログでも書いて世界に何事かを発信していくかという気持ちになるもので、従って12月は、毎日とは言わないまでも少しずつ、書きそびれてきたことを書いてゆきたいと思う。
 はてなブログの下書きやEvernoteのノートには、書こうとして放置したことがらがいくつか溜まってはいるのだが、古いことから書いていくときっと新しいことを書くことが永遠にできなくなるので、基本的には時系列とは逆に、しかし思い出した順に適当に、今年のことを振り返っていく。

 以上の理由から、この記事を書いている現在は平成29年12月12日未明であるが、この記事の触れる内容は基本的には同年12月10日、即ち2日前のことである。



ごちうさ映画を観た

 ごちうさの映画(「ご注文はうさぎですか?? ~Dear My Sister~」)を観に行った。
 といっても、今回が初めてではなく2度目である。前回は公開日である11月11日(ぴょんぴょんの日)に行ったから、ちょうど1か月ぶりだ。

f:id:suzusime:20171212035112j:plain
これは前回撮った劇場外の宣伝幕。

 前日には「明日ごちうさを観に行くぞ!」と考えていたにもかかわらず朝起きたのが午後1時頃であったため、午後3時半からの回を予約した。この時間なら余裕だろうと考えていたのだが*1、ぼーっとしていたら時間が相当ぎりぎりになっていた*2
 京都駅北口にバスが着いたのは15時28分。そこから京都駅西側廻廊*3を息を切らしながら抜けてイオンモールに着いたのが35分。しかし息が上がったために飲み物を求めたりして、入場できたのは40分。前回来たときに長い予告をみた記憶から間に合うかもと思ったが、普通に始まっていた。OPが見られなかったのは痛恨極まりない。遅刻はかなしい結果を産む。知見である。

 なお、前回も同じ道を通って行ったのだが、前回は余裕があったのでこんな写真を撮っていた。うきうきするあたたかな秋の午下がり、「日常の中にも不思議の交差点♪」とかうたいながら。

f:id:suzusime:20171212034541j:plain
ビルの蔭にあった神社。どうもオムロンの本社らしい。

 閑話休題
 肝腎なのは映画の感想であるが、それについては一度目に観たあとのこの短文が私の得た感動をよく表していると思う。

 ほこで刺されるという表現*4がぴったりくる、そんな情動である。ここではそれを散発的ながら、もうすこし詳しい言葉で記しておく(ネタバレあり)。

  • テレビアニメに比べ、映画の強みはやはり臨場感というものである*5。それを活用して、この作品はごちうさ世界というものの広さをわかりやすく示してくれた。初めの千夜とシャロちゃんが走るシーン。駅。これまで見てきた世界はこの世界のほんの一部でしかなかったことを思い知らされた。
  • 臨場感といえば、やはりラビットハウスの空気というものの表現も素晴らしいものだった。静かな店の中、カウンターに立ったチノちゃんが「この店、広いですね」と呟く……。そこで「ああ……」と感じるのである。
  • なんといってもチノちゃんの感情表現。いつものようにココアさんがいない。寂しさ、それがひとつ大きなものだろう。しかしココアさんがいない、それは普段意識しなかったことがおもてに出てくる余裕にもなるのである。この作品ではそうやって訪れたいつもと少し違う日々が描かれる*6。静かな私室でひとり勉強。ココアさんからかかってきた電話に嬉しく思い。けれどいつもの声をきくと安心して少し冷たく接してみて。「切ってしまいました」、そう言うシーンでは、私の心はほとんどチノちゃんのものそのものになってしまう。枕に突っ伏して、「あーーーー」と、小さな声で叫びたくなる。みんなを花火に誘おうとするシーン。チノちゃんの心の不安、恥ずかしさ、震えはそのまま私のものである。それを観る心は為しえなかった思いを託す願いである。
  • 物語というものに触れるときは、たいてい登場人物の誰かに感情移入するものだと思うが、私の場合ごちうさではチノちゃんである。最近キャラクターに対してよく使われる表現で「尊い」というものがあるが、尊いものに近づきたいというのは人の*7自然な願いである。「俺の嫁」という言葉に代表されるような「それを自分のものとしたい」という願いもあるかもしれないが、私の場合はそういうものではない*8。「自身が尊いものになりたい」という憧れの思いである。魂をチノちゃんの如く昇華することを願うのである。ジャンプ漫画の主人公になりたいと思う子供のように、私はチノちゃんで在りたい。……そう胸の内で呟くたびに胸の下あたりに湧き上がる、この切ない痛みは一体何?
  • こういうわけだからどうしてもチノちゃんに注目してしまうのだが、それ以外にも見るべきところはある。ひとつ印象深いシーンが、「話し中」になるシーンである。インターネットが普及し、電子メールやSNSでの連絡が一般的な時代、「話し中」は過去の思い出のなか、私の場合は幼きの頃の思い出のなかの存在である。そうすると、子供の頃、親の実家に帰省した時のことを思い出す。子供の頃といわずとも、(もっとココアちゃんの状況に近い)一人暮らしの今の暮らしから実家に帰ることにも思いが至る。若い=新しい――そして時に寂しい――世界の対称としての、家族の=古い世界。北欧のフィヨルドのなかにあるようなココアちゃんの田舎であっても、そこに郷愁というものの共有を得られるのである。
  • ココアちゃんが将来について話すシーンは、(将来どうしようか軽い絶望のうちに悩んでいる*9私にとって)つらいものでも、やさしいものでもある。「やさしい大人になる でもでもでもそれ以上わからない」とはいうけれど、大人ってなんだろう。私はもう大人になってしまったのか? どうでもいいが、半ば冗談として言っているココアちゃんが物理学徒になるという説は、実はかなりの現実性を持っている気がしてきてならなかった。
  • 青山さんと編集さんの関係性が結構好き。

 芸術というものは人の感情を動かしてなんぼというものだと思うので、少なくとも私にはとても良い映画であった。
 ごちうさにはギャグシーンも多いが、私はどうしても少し真面目な部分、そこで描かれる微妙な感情の機微が好きなところがある。でも、ギャグシーンが冗長かというとそうではなくて、あれがあってこそ「ごちうさだ」と思えるのだ……そう感じた。

SECCON 2017 Online CTF に出た

 話は大きく変わってSECCONの話。
 先ほど午後1時に起きた、と書いたが、それはこれのせいである。
 今までつけていた脚注で察せられるかもしれないが、最近ダメダメで、何もできていない。9日土曜日もそんな感じで、一日中家の布団でぼーっとしていたら一日が終わりかけていた、という具合であった。
 それで夜になって、こんなことしてるくらいならやってみるか、と最近流行のストロングゼロを呷りながら、SECCONにエントリーした。
 サークルで開かれていたCTF勉強会*10に出ていたことはあったものの、考えてみれば一度もまともなCTFの大会に出たことがなかった。折角勉強したのだしやっておこうという気持ちになったのだった。

 朝にもういいかなと満足するまでやって、結果は4問正解で600点345位。インターネットを探せばWrite Upがたぶんたくさんあるのだが、初心者の参戦記ということで各問題の感想をちょっと書いておく。

Run me!

 最初に解けたのがこれ。
 プログラムを動かしてくれといっているのだが、貼られているPythonコードを見ると、フィボナッチ数列の第11011項を10進数で表したときの上32桁を求めるプログラムであるらしい。
 当然普通には無理なわけで、Wikipediaやオンライン整数列大辞典などをしばらく眺めながらどうしたものかと考える。
 この前ISUCONで出たらしいBigIntの上15桁を求める問題と似ているのでどうにかならないかなと考えるが、それとは違い自分で数値を計算する必要がある。
 そこで上32桁だけ正しい値に保ちつつ計算する方法がないかなと紙に書いてやってみたりするが、足し算なのでまあダメっぽい。
 そもそもPythonの整数型って何bitだったっけと考えたところで気づく。
 この問題は「フィボナッチ数列の第11011項を10進数で表したときの上32桁を求めろ」といっているわけではなく、「このプログラムの実行結果を求めろ」といっているのであった。
 というわけで、桁溢れを無視してPythonの整数型の範囲だけの演算で得られた結果、つまりバグを含んだ計算結果を答えてしまえば良いわけである。
 するとあとは簡単で、再帰函数で書かれたプログラムをメモ化再帰か漸化式で書き直してしまえばいいだけになる。
 そういえばこれは競プロじゃなくてCTFだったなぁ、と思い出させられた。
gist.github.com

SHA-1 is dead

 次に解けたのがたしかこれ。
 SHA-1ハッシュ値が衝突するような2つのファイルをアップロードしてくれという問題である。
 SHA-1の強衝突耐性が破られたというのは大ニュースになっていたけれど、それはGoogleが鬼のような計算機力(≒金の力)で殴って得た結果だったはずで、一般人にはどうしようもなさそうな気がした。
 そこでまあ思いつくのがSHAtteredで公開されているサンプルのPDFを上げる方法だが、この問題ではファイルサイズに条件があり、2017KiBより大きく2018KiBより小さいファイルでなくてはならない。このPDFは413KBほどなので条件に合わない。
 それでどうしたものかということになるが、確かこの問題は「先頭から順にブロックに区切ってハッシュ値を計算していったときにどこかで同じ値が出てしまう」ということに起因するものであったような気がした。そうならば末尾に適当な同じデータを付け加えてもハッシュ値が同じになるはずである。ということで雑にPythonコードを書いてファイルを生成し、SHA-1ハッシュを計算してみたら同じだったので投げてみたら通った。
gist.github.com

Vigenere3d

 暗号を解くやつ。
 ヴィジュネル暗号とかいうものらしく、とりあえずググって出てきたWikipediaをみたり、「ABC」の三文字の場合についてコードを追いながら紙に書いてみたりした。
 しばらくやっていて、(Wikipediaにも太字で書いてあったのだが)鍵の文字数を知られないことが重要であること、つまり鍵の文字数の周期でただのシーザー暗号になるということを理解する。
 そして、問題を見てみるとどうも鍵の文字数が14文字であるっぽく見える。
 で、平文の最初の7文字は「SECCON{」であることが分かっている。
 それだけだと足りないようだが、実装を見るとどうも鍵は元の文字そのものではなく、実質的に半分の長さ、つまり7文字の長さの数値列になっていそうであることがわかる。

 それなら解ける。
 ……ということで、紙で手作業でシーザー暗号を解いてみると、途中で「SECC」という文字列がでてきたので「これはいけそうだ」と思い、プログラムに解かせた。
 手作業レベルでできるような暗号解読は、それこそ探偵小説のようでやっていて楽しかった。

gist.github.com

Powerful_Shell

 最初はLinuxで動かすのかなとLinuxVMから落としたが、fileコマンドを売ってみたらTextとかでてきて、中をみたら見知らぬプログラミング言語で書かれたプログラムで、なんじゃこりゃとなった。
 眺めて意味のありそうなコマンド名でググってみたらPower Shellらしいことがわかり、ああそういう意味のタイトルかと。
 これを動かすのにセキュリティポリシーの変更なんかが必要で、少し面倒だった。
 ちょっと怖いなと思いつつも管理者権限のPower Shell上で動かすと、ピアノの鍵盤がでてきて、楽しいなーと。

 そのままじゃ埒が明かないのでソースを覗くが、例の如く難読化されていて意味不明。
 ただ、一番下の行で$ECCONなる変数の中身をプログラムとして実行しているらしいことが分かったので、その変数をファイルに書き出すようにプログラムに手を加える*11
 するとちゃんと読めるスクリプトが出てきて、中に書いてあった某曲*12のメロディを弾いてクリア。
 
 ……かと思いきや、パスワードを入れろとか言ってくる。第2ステージがあるらしい。
 そのあとは結局似たようなことをした。つまりスクリプト内で生成されたスクリプトを実行するようなつくりなので、その中身をファイルに書き出して読むのである。変数名に記号を使って難読化しているものは適当に置換したり変数の内容一覧を表示してみたり。
 そんなこんなでパスワードを見つけて入力したら答えが出てきた。

 ピアノの鍵盤を弾くと音が鳴るというビジュアル的な要素があって、これも(初心者ながら)解いていて楽しい問題だった。


以上が解けた4問である。他に、解けなかったが挑戦した問題についてもいくつか書いておく。

putchar music

これもビープ音で音楽を鳴らすやつ(っぽい)。
Scientific LinuxVMで動かしてみたが何の曲か全くわからないので諦めた。

Baby Stack

スタックオーバーフローで攻撃するやつ(だと思う)。
こういうのこそCTFという感じで、スタックオーバーフローでシェルを奪えることをCTF勉強会で知った時は感動したので、是非解きたかった。
gdb-pedaで頑張って動作を追ってみたものの、何処に飛ばせばいいのかなど見つけられず、スタックの動きもよくわからなくて断念。
Goで書かれているようだったが、Goでもスタックオーバーフローするんだなー、と思った。

Ps and Qs

暗号化されたファイルと公開鍵2つが与えられ、それを復号しろという問題らしかった。
同じ秘密鍵から作られた公開鍵が複数あるともしかして秘密鍵の情報がでてくるのか? と思い適当にググったところ、http://www.jnsa.org/seminar/pki-day/2012/data/PM02_suga.pdfがでてきてPsQsなどという文字列が見えたのでこれかな、と考える。
Widespread Weak Keys in Network Devices - factorable.netで公開されているfastgsdを落としてきて、VM上でビルドするところまではやったものの、よくある鍵の最大公約数の一覧(?)がわかったところでどうすればいいのかよくわからないので諦めてしまった。


……といったところである。

CTFは消耗するけれど、解けたときはやっぱりうれしくてハイテンションになるので、なんともいえないものである。
CTFにしろ競プロにしろ、いろんなものに少しだけ手を出してまともにはやらないという私の悪い癖の結晶のようなもので、そのあたりが痛むところではあるのだけれど。ちなみに、最近は『ステラのまほう』原作の照先輩エピソードを見て「ああ……」などと思うなどしていた。ステラのまほうはいいぞ。

*1:私の家から京都駅まではバスで約40分、劇場であるTジョイ京都まではそこから徒歩約15分。

*2:最近はこんな感じのことばかりでなかなか大学の講義に出られない

*3:走りながら適当に名付けた。京都駅北口バスターミナルから西に油小路まで行き、線路をくぐる地下道で南側に抜けるルート。若干遠回りな嫌いはあるが、駅構内を通らないので走れる。

*4:この単語なかの「戟」は動詞として使われているようだけれど。

*5:良い視聴環境を用意すればテレビアニメもより迫力をもったものとして楽しめるのだろうが、それは一学生には難しい。

*6:「日常」ではないのかもしれない。

*7:「凡人の」なのかもしれない。

*8:だから「きらら」を求めるのだと思う。

*9:今月中に卒業研究の希望調査を出さないといけないのだが、不安しかない。

*10:『セキュリティコンテストチャレンジブック』(ハリネズミ本)と『暗号技術入門 秘密の国のアリス』の輪講をしたりした。

*11:PowerShellなんて使ったことがないので書き出し方は当然ググった

*12:私はこの曲が好き。