お花畑に行きたい

技術系のことや日常

Tkinterを使ってゲームを作ってみた

この記事は長崎県立大学 Advent Calendar 2019の19日目の記事になります。 前回の記事はこちら。

serverboujin.hatenablog.com

皆さんお久しぶりです。小林(仮)です。

12月も後半になったので、クリスマスソングを聴きながらこの記事を書いています。 やっぱりクリスマスソングはいいですね。雰囲気がとても大好きです。

後、大学4年生のこの時期といえば卒論です。 今年中に完全に終わらせる予定だったのですが年を跨ぎそうです。 安心してクリスマスを迎えたかった…

では本題に入ります。

今回はTkinterを用いてちょっとしたゲームを作ったのでそのことについて書いていきます。

何を作ったのか

久しぶりに何か作りたくなったのでゲームを作ることにしました。

そこで作成したゲームが、

「10秒間でどれだけクリックできるのかゲーム」

です。

どういうゲームかというと名前の通りで、10秒間に左クリックしまくって何回クリックできたのかを見て喜ぶだけです。 なんと単純。

環境

OS : Ubuntu 18.04 LTS

言語 : Python 3.6.8

Tkinter 8.6

全体

完成したプログラムがこちらです。

GitHubでも公開しています。 github.com

いろいろ苦戦しましたが一応完成しました。

リファクタリングしろ!って感じですね、すいません。

今回はただプレイするだけでなくページ遷移も行いたかったのでframeを使ってタイトル画面とリザルト画面も作りました。

ページ遷移するときは、遷移先のページのframeを最上面に持ってきて表示するやり方が簡単そうだったのでその手法を採用しました。 (もっといいやり方があったら教えてください)

ゲーム画面

ゲーム画面はこんな感じです。

  • タイトル画面

Startボタンを押すと3秒カウントダウンした後にプレイ画面に遷移するようになっています。

f:id:Kobayashi9:20191218014043p:plain
タイトル画面

  • プレイ画面

10秒間ひたすらClickボタンをクリックします。

f:id:Kobayashi9:20191218014019p:plain
プレイ画面

  • リザルト画面

クリックした回数の結果です。 Titleボタンを押すとタイトル画面に戻ります。

(あれ、Titleボタンの位置がおかしい…笑)

f:id:Kobayashi9:20191218014100p:plain
リザルト画面

最後に

このゲームを見て、

「あれ…なんかどこかで見たことあるぞ?」

と思った方もいるかもしれません。

そうなんです。実はこのゲーム、2016年の長崎県立大学の学園祭でCyber研究会が展示していたゲームとほとんど同じなのです。 *1

当時は誰かが作っていたのですが、個人的に思い出深かったので自分で作ってみることにしました。 久々にやるとちょっとだけ面白かったです。

後、Tkinterオブジェクト指向の練習にいいなと思いました。

参考文献

*1:展示されていたゲームでは対戦できていたが今回作成したゲームは一人用

MaidakeCTF2019 Writeup (Crypto一部)

初めまして。小林(仮)です。

先月、あおかけす氏(@fulutori_aonos)が開催したMaidakeCTF2019でCryptoの問題を2問出題させてもらったので、そのWriteupを書いていきます。(遅くなってすいません)

因みに私が作成したのは、
Do you know XOR[300]

Secret Image[500]
です。

それではWirteupを書いていきます。

Do you know XOR[300]

この問題では暗号化するためのプログラムとその出力結果が渡されていました。

暗号化するプログラムの方では、平文を50文字になるようにパディングした後、パディングした平文と秘密鍵排他的論理和をとることによって暗号文を作成しています。そしてその結果を16進数表記でresult.txtに出力しています。

単純なXOR暗号です。

XOR暗号の仕組みは、平文m、秘密鍵k、暗号文cとしたとき以下のように表せます。

暗号化

m ⊕ k = c

復号

c ⊕ k = m

つまり、平文とそのときの暗号文が分かれば秘密鍵がわかるということです。

よって今回の問題では、平文とその暗号文から秘密鍵を発見し、その秘密鍵でFLAGの暗号文を復号しasciiコードを文字に変換するとフラグを得ることができます。

復号のプログラムはこんな感じです。

これを実行すると、

MaidakeCTF{You_know_the_characteristics_of_XOR}

が得られます。

Secret Image[500]

 この問題ではpngファイルと秘密鍵のデータが渡されていました。

f:id:Kobayashi9:20191003231631p:plain

この問題はこの画像がAES-ECBモードで暗号化されていることがわかればすぐに解けます。画像を渡された秘密鍵で復号するだけです。

暗号化する画像は何でもよかったのですが、ヒントとしてlinux penguinを暗号化してECB Penguinを作ってみました。(linux penguin crypto と検索すると似たようなような画像がたくさん出てきます)

復号プログラムは以下です。

このプログラムを実行すると、下図のようになります。

f:id:Kobayashi9:20191004001249p:plain

 

フラグは

MaidakeCTF{AES-ECB_mode_is_Vulnerable}

です。

最後に

初めて問題を作ったのですが、自分が作った問題って愛着が湧くものですね。

CTF開催中、度々自分が作った問題の正答数を確認していて、もう我が子同然でした。

個人的にSecret Imageは誰にも解かせるつもりはなかったのですが、外部の方にはあっという間に解かれてしまい、悔しかったです。

Writeup書くのって意外と大変なんですね…(笑)