はじめに
はじめましての人は初めまして、そうでない人はお久しぶりです。Naru820です。
この度はCPCTF 2026にご参加いただき、誠にありがとうございました!(参加してない、できなかった人はこの後問題をgithubかなんかに上げる予定なのでupsolveしてね!)
去年は作問だけの担当だったんですが、実は今年は運営もやってました。というか普通に統括でした。そっちのほうでもいろいろ反省があったりとかいろいろ考えたりとかもしたんですが、別に需要ないよなと思ったのでそういう話はここではしません。
本文
今年は運営の方の業務があったり、シンプルになんか問題が全然思いつかなかったので、去年に比べて問題量は控えめです。いないとは思うんですがもし楽しみにしていた方がいたらすみません。
一応問題の解法に触れるのでネタバレ注意です。
PPC
Modulo Equation
Lv.1にしてはむずいかなという気持ちもあります。本当は って書きたくなかった。
一応プログラミング未経験者でも頑張って調べれば書けて、上級者にとってもキーボードだけでなく2秒ぐらいは頭を動かそうと思えば動かせるような問題を...と思って出しました。
コンテストの提出を見ると、普通に全探索解が圧倒的に多かったです。まあそれはそう。でもちらほら頭を動かしている人もいました。ありがとうございます。
ちなみになんですがこどふぉで既出でした。そんな...(後から調べてどうしようか迷いましたがまあ許してもらえるかなと思って出しました。許さないという方、大変申し訳ありません。)
GCD Knapsack
調和級数で解く簡単めな問題を作ろう!と思って頑張って考えたらこれになりました。
後からよくよく考えたらただの倍数ゼータ変換でしたがまあ典型紹介枠ということで収まりもよく...(本当?)
ちなみに最初に考え付いた時はLCM Knapsackでした。ただ、ネットで調べてみると全く同じ問題があったので慌てて改題しました。その後解説を見たら普通のナップサックDPをしていて大困惑しました。
コンテスト中の提出を見ると、よくわからないけれど何かに騙されて怒り、配列の名前を「カス」にしている人がいてちょっと傷つきました。本当に何に騙されたのかがわかっていません。考えられるとしたら重みの条件が最大公約数であるということを読み飛ばして普通のナップサック問題と思った以外にないんですが、それも流石に問題文と問題名を読んでなさすぎると思うのでない...ですよね?
Get More Money
これがad-hocだと思っていた時期が僕にはありました。勉強不足...
この記事にこの問題の全てが書いてあります。あと想定解どおりのSlope Trick部分の操作もABCで既出でした。(原案も記事と同じ人らしい)完全に居場所を2000年前に通過されてました。...と、コンテスト出題前の自分は思ってたんですが、なんとコンテスト開催後にhttps://atcoder.jp/contests/abc250/tasks/abc250_g を教えられて膝から崩れ落ちました。本当にマジのマジで知らなかった。ちなみにtesterは知ってたみたいです。言ってよ~
白状すると、https://atcoder.jp/contests/arc125/tasks/arc125_e をパクろうとしたら失敗して、そういえば最小費用流も双対とれるしそれで問題作るか!笑と思っていい感じになるグラフを探したらこうなりました。体系的でない知識を仕入れているのがバレてしまう。というか今回の僕のPPCの問題全部既出問じゃないか?全然精進してないし本当に偶然なんですけどね...すみません...(一応他の既出でない問題も作ってましたが話し合いの結果こうなりました。)
知ってる人は多分楽に解いてそうな感じがありました。せめてもうちょっと面白いLv.5を出したかったのですがちょっと思いつかず...すみません。でも新入生の1位と2位の差がこの問題だったっぽいのでまあいいかなとも思ってます。
CTF
自分がある程度できる分野の問題の足りない分の穴埋めをする感じでした。簡単な問題って作るのは難しいんですよね。
Dualcast(Crypto)
解法
コードを読むと、ただ型を変換しているだけなので、逆変換すればいいです。
感想
CryptoのLv.1がない!!!けど古典暗号出したくない!!!となって、慌ててNzt3さんとどうしようか考えた結果、過去の初心者の自分は普通にbytes_to_longとかがよくわからなくて苦しんだ(ちゃんと調べてくれ...)ことを思い出し、出題されました。果たして型変換は暗号なのか?(違う気がする...)
フラグは本当に何も思いつかず、無理やりになってしまいましたがアメイジング・グレイスのサブタイトル?の「what color is your attribute?」をもじりました。でも多分だけど参加者の誰にも伝わってなさそう。
Anomaly 2(Crypto)
解法
RSAの暗号化のときに、 が逆になって を計算しています。あと です。
よって、条件から はともに の倍数です。
したがって、 も の倍数で、さらに他の素因数はあまりないことが期待できます。
したがって、 の約数を大きい順に見ていって、復号していけばフラグが現実的な時間で取れることが期待されます。実際、今回の配布された数値では です。
感想
いい感じの簡単な問題がなかったのでとりあえず去年みたいにどれかRSAを入れ替えてみるかと思っていろいろ試したらいい感じになったので出題しました。ちなみに最初の予定では のパターンを出す予定で準備してたんですけどなんか気づいたら今の数値になってました。でもまあいろいろ2倍だしちょうどいいかということでこのまま出題。
2倍要素としては文が2つ与えられる、異変が2つある(逆、)、最後に2倍 で結構入ってる気がします。
ちなみに出口ものりばもやったことありません。ホラーゲームあんまり好きじゃないんですよね...
Omikuji(Rev)
解法
ghidraでデコンパイルすると、中でフラグを1文字ずつ足してフラグを構成しているのが見えます。
感想
フラグチェッカーはみんな飽きたと思うので趣向を変えてみました。stringsを弾くかどうか迷いましたがまあghidraとかを教えたかったので弾くことに。そうしたらはじめLv.1のつもりで作ったのですがLv.2に昇格。まあ妥当か…
フラグは無限に積んでたシュタゲをようやくやったのでそれに影響されてます。栗悟飯とカメハメ波さんが当然一番好きです。逆にまゆりは嫌いだった...
あとこれ本当にどうでもいいんですけど、最初ゲームをやり始めたときに倫太郎と至が話しているのが夜神月とウィスパーが話しているようにしか聞こえなくて、もし夜神月がデスノートの代わりに妖怪ウォッチを拾ったら妖怪世界の神になろうとしたのかなとか思いました。
Night View(OSINT)
解法
まず、写真の後ろに写っている橋が、調べるとレインボーブリッジであることがわかります。あとは、google earthなどで写真に合致する場所を調べればいいです。五十嵐冷蔵がもし読めたらもうちょっとショートカットできるかもしれません。
感想
画像検索では簡単に出てこないけど、写ってるものをちゃんと確認したら解けるOSINTの基礎的な問題が欲しいなと思ったので出しました。去年のBench枠です。こういう地道な作業をやるのがOSINTだよなあと勝手に思ってここ2年間出してます。(本職の方もし違ったらすみません。)
OSINT好きな方にも面白いと思ってもらえたみたいです。よかったです。もっと難しいのが欲しかったとも言われました。ぼくももちろん出したかったんですがリソース不足で無理でした。大変申し訳ございません。やっぱり実在の人物を対象とはなかなかできないので、個人的には本物?のOSINT(Bellingcatとかがやってるようなやつです)みたいなことをやりたいんですがなかなか難しくて…SNS問とかも作りたかったんですが、うまくやらないと難易度の上げ方がエスパーになってしまい、それは違くね?となってしまって無理でした…
ちなみに解いた人は察したかもなんですけど、これは僕がまぐれでフィックスターズのインターンに通った時にとった写真です。社内の雰囲気は死ぬほどよかったし、メンターの人も超優しくて天才だったんですけど、僕の技術力が低すぎて申し訳なくなって毎日勝手に胃と心が痛くなっては毎日4,5回トイレに行き、トイレをするだけで100円トイレをするだけで100円と心の中で詠唱しながら働いてました。
昼休みにご飯を食べに行くのと帰りにゲームセンターに寄るのだけが心の支えでした。でも僕以外の人はもれなく全員集中して楽しそうにかつ真剣に仕事してました。自分が情けない...
技術力がある人なら僕みたいにならずに本当に楽しい経験ができる(僕もこんなことになってましたが楽しかったです)と思うので是非インターンに申し込んでみてください!(もちろんいい生活やpixivでも楽しい経験はできると思います。)
ssh(Shell)
解法
インスタンスを立ててsshしてcatすればいいです。
感想
sshをしてみようという問題です。インフラ担当の@kentaro1043,@BN256 がすごすぎて何と個別インスタンスが導入されました。すごい。
でも僕がインフラの事なんも知らんせいでデプロイしたりするのにアホほど時間かかりました。多分CPCTF2026の問題のうち、準備にかかった時間/解くのにかかる時間が最大な問題はたぶんこれです。でもおかげでようやくDockerをそこそこ理解できた気がします。今更?
ssh2(Shell)
解法
sshと比べてcatが使えなくなっていますが、grepなどをすればいいです。実行してもエラーメッセージが返るようになっているので解けます。
感想
linuxのコマンドをもうちょっと知ろうという問題です。本当に話すことがない...でもシンプルながら解法が多そうで面白かったと言ってくれた人がいたので満足です。
フラグは頭隠して尻隠さずをもじりました。一応コマンドのheadともかけたつもりです。これも誰にも伝わってなさそう。
CPCTF jail(Shell)
解法
使えるコマンドがc,p,t,fと記号だけで、10文字以下のもの1つだけです。記号が使えるので結構なんでも通ると思います。
事前に確認していた解法は2種類あります。
一つ目は$(</f*/*) 系で、こうすると/bin/bash: line 1: CPCTF{Y0ur3_4_7ru3_CPCTF_l0v3r}: command not foundとなります。
もう一つは、${!#}で、これをするとタイムアウトするまでの1secだけ普通のbashを得ることが出来るので急いでcatすればいいです。
感想
jail問一問ぐらい欲しくないか?ということでまあかなり初心者向けですが1問。
結構制限は緩めにしたので、いろいろな解法があると思います。実は記号全般許してるのでアルファベット使わなくても余裕でできます。なのでフラグは解法によっては大嘘になります。どっちの解法で解いた人が多いんでしょうか?(もし全然別の解法をした人がいたらこっそり教えてください。)
あとで気づいたんですけどこれ解けたらshell全完できますね。(この解法で全部通ります。)というかLvが上がるごとに制限が単調増加していってました。何も意識してませんでした。
あとなんか新入生にかなり好評っぽい?ので嬉しいです。もうちょっと頑張って難しい問題作ればよかったな...
おわりに
思うところが何もないと言えば嘘になるのですが、まあとりあえずコンテストを開催できて良かったなと思っています。簡単のものでもいいのでぜひwriteupも書いてみてください。(一応2週間以内に書いてdiscordに投稿すると賞金がもらえるかもしれません。)
来年はもう多分CPCTFの作問や運営は本当にやらないと思います(研究室所属などもありますし)。でももしかしたらまたどこかで僕の問題を見かけることもあるかもしれないので、そのときは解いてくれると嬉しいです。