参加登録
参加登録を開始しました!下のリンクから参加登録お願いします!
CPCTFとは?
新入生の皆さんに、競技プログラミング(Competitive Programing)とCTF(Capture The Flag)を体験してもらうイベントです!
競技プログラミング(Competitive Programing)とは、ある条件に沿った入力が与えられて、問題の解になるような出力をする、というのをプログラムするものです。プログラミングのスキルを上げたり、アルゴリズムや数学の勉強になり、何より楽しい競技です。CPCTFでは、PPCという競技プログラミング的なジャンルになります!
詳しくはアルゴリズム班のサイトを見てください!
CTF(Capture The Flag)とは、コンピュータセキュリティ競技のことです。
CPCTFでは、機密情報に見立てたFLAG(フラッグ、旗)と呼ばれる文字列を、運営の用意したコンピュータから盗み出すのが目標です!
詳しくはCTF班のサイトを見てください!
CPCTFでは、新入生でも楽しめる難易度の問題がそろっています!気軽に参加登録しちゃいましょう!
新入生の方はもちろん、2年生以上や学外の方も歓迎です!
東工大の新入生の中で、上位5人にはささやかな景品もあります!
スケジュール
競技開始 : 5月1日(日)13:30
競技終了 : 5月1日(日)19:30
結果発表 : 5月1日(日)20:00
※スケジュールは前後する可能性があります。
レギュレーション
個人参加
CPCTFでは、チーム参加は認められません。
問題について
CPCTFでは、大学新入生向けの 易しい問題 を多く用意しています。
各問題には難易度が設定されています。Newbie, Easy, Medium, Hardの順で難しくなります。
また、各問題にヒントが用意されています。
詳しい情報は、後日公開する競技ページをご覧ください。
注意事項
この CPCTFにて求められる手法を管理者の承諾を得ていない電子計算機に対して実行すると不正アクセス行為の禁止等に関する法律に抵触することがあります。該当する手法を外部のサーバーに対して実行しないでください。
過去問をといてみよう!
CPCTFの雰囲気を楽しんでもらうために、過去問をといてみます!
実際に、自分のPCで試してもらえると嬉しいです!
各問題にはFLAGが用意されています。FLAG{*****} (*は任意の文字列)を見つけることが目標です!
Call And Response
- ジャンル:PPC
- 難易度:Newbie
問題文
ロリ子は推しのライブを見に来ました。そこでは、コールアンドレスポンスが行われるようです。そこでロリ子はコールアンドレスポンスの練習をすることにしました。 ロリ子にコールアンドレスポンスのお手本を見せてあげてください。具体的には、英数字の文字列Sが入力として与えられるので、Sを出力してください。
制約
- Sは英数字からなる文字列
- 1 < |S| < 10000
入力
入力は以下の形式で標準入力から与えられる。
S
出力
Sを出力せよ
サンプル
入力例1
CPCTF
出力例1
CPCTF
解いてみる
問題文を読み解くと、与えられた入力をそのまま出力すればできそうです!
比較的簡単で、東工大の授業でも使われているPythonという言語で、この問題を解いていきます。
ジャッジサーバーはPython以外の言語にも対応しています。詳しくは、後日公開する競技ページをご覧ください。
CPCTFでは、Google検索を使うことができるので、「Python 入力」や「Python 出力」などでたくさん検索しましょう!
すると、input()や print()などを使った記事が見つかったと思います。Pythonではinput()を使って、入力を得ることができ、print()を使うことで出力することができるので、答えは下のようになります!
s = input()
print(s)
競技中であれば、上のプログラムを提出することでFLAGを得ることができ、点数を獲得できます!
作問者writeupはこちらです。(※解説のようなもの)
この調子で他ジャンルもやってみましょう!
Do you know Julius Caesar ?
- ジャンル:Crypto
- 難易度:Newbie
問題文
換字式暗号のひとつにシーザー暗号というものがあります。シーザー暗号は非常に簡単な暗号で、元々ある文字列をいくつかずらすといった暗号になります。
例えばany
という文字列を、それぞれの文字に対して、5 つずつアルファベット順にずらすという行為を行いましょう。z
を超えた場合はa
に戻ります。すると、a
はf
になり、n
はs
になり、y
はd
になります。よって暗号化するとfsd
といった形になります。
これを復号するには、逆にfsd
という文字列を 5 つ前に戻してあげればいいということになりますね。
いくつずらすかは暗号化のたびに変わります。上記の例では 5 つずらしましたが、いつも 5 つずらすとは限りません。いくつずらしたかを予想して復号するわけですね。
それではこれを踏まえて、以下の暗号を復号してみましょう。(ずらすのはアルファベットだけです。)
SYNT{Nyrn_wnpgn_rfg}
解いてみる
問題文を読んでみると、どうやらシーザー暗号を使った問題みたいです。前の問題と同じようにシーザー暗号について色々検索してみます!
「シーザー暗号 復号」などで検索してみると、シーザー暗号を自動で復号してくれるサイトが見つかります。
1から復号してみます。13で復号してみるとFLAG{Alea_jacta_est}
を得ることができました!
今回は総当りでやってみましたが、FLAGが必ずFLAG{*****}
であることを利用すると、もっと楽に解くことができます。S
は必ずF
になるので、13文字ずれていることがわかります。復号するためには、同じ文だけ逆方向にずらせばいいので、13文字前に戻すとFLAGを得ることができます!
作問者writeupはこちらです。(※解説のようなもの)
もっと解いてみる
CPCTFでは、今回解いてみたPPCや、Crypto以外にもたくさんのジャンルがあります!
PPCをもっとやりたいという人は、AtCoderをやってみましょう!
CTFの問題をときたい人は、CpawCTFや picoCTFに挑戦してみましょう!
CPCTF関連記事
過去のCPCTFに関する記事をいくつかピックアップしました!
CPCTFタグから他の記事を読むことができます!
さいご
CPCTFは初心者の方から上級者の方まで楽しめるイベントになっています!
ヒントも3段階用意されているので、初心者の方も是非臆せず参加してみてください!
みなさんの参加をお待ちしています!