CTFで初心者向けの問題を作ってみた話

はじめに

これは香川大学工学部サークルSLP(学生プログラミング研究所)のアドベントカレンダー

3日目の記事です。SLPのメンバとしては居ないことになっていはいますが、勝手に書いていきたいと思います。

病院の検査通いで余り体力が残っていないのでささっと書いてしまいます。

 

CTFってなんぞ?

CTF(Capture The Flag)についての説明です。SECCONの話をしようとしてる人もいるみたいなので手短に。。。

 

ここで取り上げるCTFは、コンピュータセキュリティの分野におけるものを指します。

Wikipediaで説明されているとおり、CTFは通常、参加者に対しコンピュータを守る経験や、現実の世界で発見されたサイバー攻撃への対処を学ぶ教育手法として企画されています。

このCTFには、競技の種類として、クイズ形式と攻防戦形式があります。

この記事では、クイズ形式のCTFの問題を作っていく内容の話をしていきます。

初心者向けのCTFについて

現在ある環境で、初めてCTFをやってみたいという人におすすめされるようなものとして、 ksnctf や CpawCTF が挙げられたりしますが、実際にやってみると、CTF初心者からは何から手をつけていいのやらわからないようなものとなっています。

そこで、コンピュータ初心者に対しては不向きであることから、自分たちで勝手に簡単なCTFを作ってみようという話が上がったので、簡単な問題を作って内輪でコソコソと作っています。

そもそも簡単な問題ってなんだ?

 CTFには、以下のような問題の種類があります。

  • Miscellaneous

コンピュータに関する雑学や数学パズルなどの問題

  • Network

ネットワークのパケット解析など

  • Web

Webアプリケーションの脆弱性に攻撃する問題

  • Pwnable

プログラムの脆弱性に攻撃する問題

  • Forensics

HDDやUSBメモリや物理メモリのイメージファイルを解析する問題

  • Binary

プログラムの中に埋め込まれた回答を探す問題

 

それぞれに、問題の特色があって、個人の得手不得手で難易度は変わってきます。

先程紹介したCTF常設サイトでは、殆どの問題がMiscellaneous以外となっています。

コンピュータを余り触ったことのない人間にWebアプリケーションやプログラムの脆弱性を付けと言われて簡単に出来るでしょうか?出来ませんよね?出来てたまるか!

ということで、初心者向けの問題に適しているジャンルは、Miscellaneousということになります。特にこの手のジャンルの中でも、Triviaというジャンルになりますね。要は、コンピュータに関する知識を学んでもらおうというわけです。

問題の内容について

では、実際に作成した問題について一例を紹介していきます。

Web検索

その名の通りWeb検索での問題です。Webで個人のブログなどにフラグの文字を含んだページを用意しておきます。そのブログをWeb検索してフラグの文字を見つけてもらおうという問題です。

この問題では、Webブラウザの使い方について知ってもらおうという考えで作成しました。Webブラウザで検索するだけでなく、Ct+fの検索ようなWebブラウザにある機能の使い方も学んでもらえるようにする工夫をするとより良い問題になるかもしれません。

圧縮ファイル

これはよくある問題だと思います。zip形式に代表される圧縮ファイルを解凍して中身のファイルに答えが入っているという問題です。圧縮ファイルの種類を増やせばいろいろな圧縮形式があることを知ってもらえるため、コンピュータの拡張子の勉強にいいと思います。

 

パスワードに関する問題

簡単なパスワードのかかったものを用意して、問題文にそのファイルの仮想の持ち主の紹介をするようにしたものです。例えば、持ち主の誕生日について説明を書きます、この時のパスワードがその人の誕生日になっているという問題です。

パスワードの設定するときに推測されやすいので、そのようなパスワードの設定には気を付けましょうという警告をできる内容です。

 

まとめ

以上のような問題を多数作製して、同じチームの人と遊んでいました。

現在CTFのサイトの作製をしていってますので、また、作成できた頃に連絡できたらなって思ってます。サーバ管理がすごく面倒なことになっているので、しばらく先になりそうだけども。。。

 

CTFと聞いてSECCONの手助けになるような内容を期待していた人には申し訳ないと思いつつ、ここまでとさせていただきます。

ファイル投稿の方法が分かれば、あとで適当な問題1つ投げておきます。

 

Dropbox - CTF問題投げつけ空間

Cocos2d-xを使ってゲームをつくりたい。

この記事はSLP-KBIT Advent Calendar 2016の4日目の記事になります。

 

突発的な思いつきだけで書いた記事です。

乱雑な文についてはあまり突っ込まないようにお願いします。

初めに

"Cocos2d-x"というフレームワークを使ってゲームを制作してみようと言う話です。
情報環境実験でJavaでのゲーム製作をしましたが、
個人的にJavaでのコーディングが好きになれなかったので、
別の方法を探していたときに見つけたフレームワークになります。
実際に作ろうとしていたゲームがよくわからないバグで動かなくなっているので、
そのことについてはまたえ別の機会に書きたいと思います。
なので、今回は紹介のみになります。すんません。

Cocos2dについて

名前に2dとあるように2D、つまり平面のゲームを作るためのフレームワークです。
平たく言えば、"Unity"の2Dゲーム版みたいなものです。
開発はオープンソースで行われています。
このフレームワーク自体はpythonで動いているのですが、
その他の言語に対応した派生フレームワークが多数存在します。
今回は、その中でもC++に対応した"Cocos2d-x"を用いて
ゲームを作ってみようと言う話です。
Cocos2d-xは、企業での利用もされていて、
最近だと、このようなゲームに使われています。
f:id:zyaguti8:20161204060236j:plain
では、今回は、Hello Worldの表示までについて書きます。
Hello World出すだけなら何も書かなくていいけど

Cocos2d-xのインストール

Cocos2d-xのインストールはとても簡単です。
公式サイトからダウンロードしてきたzipファイルを
展開して好みのフォルダに入れるだけです。
ここで気をつけなければならない点は、日本語対応していないので、
フォルダのパスに全角文字が入っていない様にする必要があることです。
大体はCドライブの直下においている人が多いのではないかと思いますね。
自分もそうです。
展開が終わったら、"setup.py"を実行してセットアップをします。
セットアップの途中でAndroidでのビルドに必要な情報の入力を求められます。
特に入力もする必要がなければそのままEnterキーでスキップしてください。
Androidでビルドすることがなければ何も入力しなくていいです。

環境変数の設定

プロジェクトを作るためにcocosコマンドを使う必要があります。このコマンドの実行ファイルはさっき展開したフォルダの中にあるので、
コマンドプロンプト上で使用するために環境変数を設定しましょう。
(自分の使っている環境はWindowsなので、そちらの説明をします。)

設定から環境変数の設定画面を開きます。
自分は、いつも"Win+i"で設定を開いて環境変数と検索して開いています。
f:id:zyaguti8:20161204060132j:plain
毎回毎回検索するのは不便だなとは思います。
というのも、Windows10にアップデートしてから
環境変数の設定にどの様に辿ったら行けるかわからなくなりました。
勝手に調べろよって話ですね、すみません。

環境変数の設定画面で、ユーザー環境変数の項目の中から、
"path"を選択して編集をしましょう。

f:id:zyaguti8:20161204060146j:plain


編集画面が出たら、その中から新規を選択し、先程Cocos2d-xを展開したフォルダのパスを入力します。

f:id:zyaguti8:20161204060204j:plain


環境変数の設定が出来たらあとはプロジェクトを作成して、起動するだけです。
わざわざ環境変数の設定方法を説明する必要はなかったんじゃないかと思われそうですね。
ただ単にWindows10になってから環境変数を設定する画面が見やすくなっていることを知ってもらいたかったってだけです。
今までの設定画面では、間違って他のパスを消してしまっていろいろと動かなくなった人はいるはずです。 いや、いてください。

いますよね....?
自分だけですか、アッハイ。

プロジェクトの作成

環境変数の登録もできて、コマンドが使えるようになったので、
プロジェクトの作成をしましょう。
コマンドプロンプト上でプロジェクトを作成するフォルダへ移動し、
"cocos new"コマンドを叩きます。
例としてはこんな感じです。

cocos new AAAA -p BBBB -l cpp -d ./

cocos newで、新しいプロジェクトを作ります。 
AAAA にはプロジェクトの名前が入ります。-p で、パッケージの指定をします。
-l は、どの言語を使用するかです。
-d は、プロジェクトのルートディレクトリの位置の指定です。
新しいプロジェクトを作るときには、
大まかに以上のことを指定しておけば問題ないと思います。
f:id:zyaguti8:20161204062550j:plain
コマンドを叩くと、プロジェクトの作成が始まります。少し時間がかかります。
 
プロジェクトの作成が出来たら、
各種環境に合わせたフォルダが複数出来上がっているので、
自分の使用している環境に合わせたフォルダの中にある
プロジェクトファイルを開きましょう。

f:id:zyaguti8:20161204062844j:plain

自分の場合、Visual Studioを使っているので、
"proj.win32"の中にあるプロジェクトファイルを開きます。

 

開いたら、ファイルの中身は何も変えずにビルドしてみましょう。

このような画面が出てくると思います。これがCocos2d-xの”Hello World”です。

f:id:zyaguti8:20161204063248j:plain

 

ゲームを作るには、これを基準にして、これにいろんなオブジェクトを追加したり、

イベントを追加したりしていけば作ることが出来ます。

 

 

最後に

アドベントカレンダーの記事を書こうとしていたには、していたのだけど、
空きがあるのが4日しかないということを知ったのが2日というのがきつかった。
丁度やっていることを軽く説明できる程度にはわかっていたので、
導入部分だけの説明にはなったけどまとめ(?)てみました。
ここに書いてある内容に関しては、他のブログでまとめている方が多くいる上に
自分より何倍もまとまっているので、
そちらのほうが絶対に参考になるだろうなって考えしかしていません。
とりあえず、誰かが見ているかどうかはわからないけど、
ここで興味持ってもらって今後の活動で使ってみようって人がいればいいなって
ぐらいの気持ちで書きました。
何故かファイルのインクルードが上手くいかないバグが起こって
プロジェクトを最初からやり直す羽目になってはいますが、
なんとか形になればその時はまたどこかのタイミングで発表できたらなって思います。
それでは。。。
 
あ、だれかポケモンの相手してください。

自らのソースコードを振り返る

これはSLP KBIT Advent Calendar 2014の11日目です。

 

※個人的な内容になってしまってます。

 

初めに

その場のノリと勢いに流され、先輩からの

f:id:zyaguti8:20141210095353j:plain

という圧力()に屈した結果、このページを書いている。

いい機会だし、頑張ろうと思う。

 

今日までのアドベントカレンダーを見る限り、今の自分の知識で

こんな記事書けるわけ無いじゃないかと思った。

 

1年を振り返ろうとか言っていたが、今までの自分のCのソースを見ていこうと思う。

(ある意味この一年間その程度の事しか出来ていない)

大学の情報系に来るまでほとんどPCを触った経験がなかったので大目に見てもらいたいです…

 

 

1年のソースを振り返る

前置きが若干長くなったことと愚痴っぽくなったことは基本的にいつものことです、はい。

 

春先に初めて書いたCのファイルが残ってないかとディレクトリを漁った結果、

今年の4月に作ったフォルダからこんなものが出てきた。

 f:id:zyaguti8:20141210094715j:plain      f:id:zyaguti8:20141210094703j:plain

誰もが通る道だと思います。

 

多分初めて書いたときのソースでしょう。

最初の方だし、特に何も言うことがないだろうと思ってたのに

さっそく突っ込みどころがありました。

なぜ出力が"Thanks"なのかと、"Hello, World"ではないのかと。

 

あと、タブ文字が空白で挿入されないというのは結構辛いと思った。

この量のソースだと、まだタブ幅が4文字の方が見やすい気がする。

 

次の月のものだと、

f:id:zyaguti8:20141210100115j:plain

演算子の練習でしょう、多分。

タブ文字が空白になってる当たり、進歩したんでしょうか。

 

各月ごとに見ていこうと思ったけど、コレは長くなりそうなので

問題の有りそうなソースを上げていくことにする。

 

f:id:zyaguti8:20141210101131j:plain

ひどい。

とにかく、ひどい。

ソースの量が少ないので何がしたいのかわかるが、何だ”整数c”って

入力したまま使ってないじゃないかと。

宣言するのも無駄な気がする。何だよ、このksコード。

 

次、

f:id:zyaguti8:20141210101835j:plain

やけに長いコードが出てきたが、最早何をしているのかがわからない。

すごく無駄な計算をしている気がするが、どこを直していいのかがわからない。

コレを修正するぐらいなら、もう一度問題を見て初めから書いた方が早い気がする。

 

この長さのソースで修正するのがだるいと思ってしまうのだから、

システム開発の修正を後からするのは相当なものだと思う。

 

 

終わりに

自分のソースを見直すいい機会になった。

ソースを探している時、後半のソースはほとんど何やっているかがわからなくなっていたので、

仕様説明などは書くようにしておきたいと思った。

書いた本人ですらわからないコードはksコード以前の問題だと思う。

  

 

もし、来年もこの企画があるようなら、

技術的な記事が書けるようになっていたいとは思った。

 

今後はサーバについての知識を付けていきたい。

明日のアドベントカレンダーの担当なわけだが

今更ブログの開設してみた

 

"予定は未定"としていたが、今の知識量で語れるようなこともないので

(誰も期待してないと思うが)

この1年を振り返ろうかと思う。

 

最悪自分のゴミのようなCのソースを見て自分で叩くようなこともしようか…