こんにちは、25Bのくあらんてぃんです。4/18~20に開催されたCPCTF2025に参加したのでWriteupというものを書いてみます。
CPCTF の詳細を知りたい方は運営陣の紹介記事を見てください。
開始前の取り組み
競プロ
競技プログラミングは高校でもやっていてアルゴリズムはAtCoderで緑です。Python使いです。水以上の新入生もたくさんいそうなのでこわかったです。
CTF
未経験でしたが、予習してもいいらしいので1週間前から少し勉強してました。

先輩方に教えてもらった記事やCTFのサイトを見て予習しました。CpawCTFをLevel 3の終わりまでやる過程でWSLやGhidra、Wiresharkなどをインストールしたりしました。また、traPのハッキング体験会にも参加しました。そこで扱われた手法が実際に問題でも使えたりしたのでアツかったです。(僕は解けなかったので悔しい!!)
先輩方に教えていただいたtraPブログの記事を貼っておきます。
traPブログは最強らしいのでブログ検索窓でCPCTFなどと検索するともっといろいろ出てきます。
課題
CPCTFをガチるなら課題を終わらせておけという先輩方の金言(遺言……?)に従ってしっかりとすべての課題を終わらせておきました。(えらい)
結果
2377.05点で全体28位 / 新入生3位でした。永遠に楽しめそうなくらい問題数が多く、もっと解きたかったです。さらに上位を目指すなら得点減少が少ないヒント2まで開けてから解けそうな問題に取り組むのもありだったと思います。
ここから解けた問題を問題一覧の順に書いていきます
Lv.1
【PPC】 45^2
print(int(input())**2)
でした。競プロはyukicoderで行われるので、事前に使っておくとスムーズかもしれません
【Misc】 Feedback Questionnaire
いつの間にか新しい問題ができてて終わりのほうに解きました。アンケートを書いたらフラグがもらえます。時間がなかったので適当に回答してごめんなさい。あとでもう一回回答しました。
【Crypt】 Heroic Code
シーザー暗号でした。CpawCTFでやったやつだ!!ツール検索して突っ込むとフラグが手に入りました
【PPC】 Luke or Bishop
競プロの基本は(おそらく)実験です。最大2回で絶対たどり着きそうなのでコーナーケースを書いてACです
【Misc】 Sanity Check
フラグが書いてあるチュートリアル問題でした。問題一覧が辞書順っぽい仕様なのはいかがなものか
【Binary】 What's this?
zipを開いたらwordって書いてあったので拡張子をdocにしてみた
docとdocxってどれだけ違うんだろ
【Forensics】 dark
真っ暗な画像が渡されたので写真アプリでいろいろしたらみえた
【Forensics】 meshitero
パソコンからでもGoogle Lens使えることにおどろき
飯テロされたのでここでご飯食べた気がする
【Shell】 netcat
教えられたコマンドを実行すればいいらしい。
WSL入れておいたのでそれ使ってみた
Lv.2
【Pwn】 2025
渡されたC言語のプログラムを見ると、2025の約数でない2つの整数の積を2025にすればいいらしい。一見不可能なのでオーバーフローさせたい。int型の上限を調べて2025足したやつを素因数分解
【Crypt】 Add and multiple
逆のことをやるので割って引く。割り切れるnを見つけて余りを引くプログラム書いた
【Shell】 Count CPCTF
巨大なテキストファイル中のCPCTFの数を数える問題。気になったのでWebShell使ってgrep。オプションが分からなくて内容が全表示されたと思ったらShellから切断された。Shellこわい……
仕方がないのでPythonのreでやった
【Binary】 Guessing
pycファイルが渡される。Pythonのファイルらしいが、バイナリみてもわからない。実行できないのでPythonをアップデートしたりuncompyle6とか入れたりしたけどどれもうまくいかないので諦め。戻ってきて、さらに調べるとdisというのがあるらしく使ったら逆アセンブルされたのがでてきた。むずかったのでGrokに投げたらコードにしてくれた。やったね
【Pwn】 INTelligent
intに関する小問3連発みたいな感じ。プログラム渡されるので頑張って調べてプログラム書いた
【PPC】 Like CPCTF?
むずそうだけど制約が小さいのでごり押し全探索
【Web】 Name Omikuji
プログラム読むと、名前のsha256の0の数で運勢が決まり、大吉だとフラグがもらえるらしい。sha256がすべて0になる文字列を探すプログラムを書いたりしたが、らちが明かない(当然)ので悩んだ。ジャンルがWebなのでFlask 脆弱性 CTFとかで調べたらそれっぽいの見つかった気がする
【Misc】 Painting Break
PSDファイルが渡される。GIMPで開けていろいろいじっても全然出てこないのでめっちゃ悩んでた。PSDファイルの説明が書かれているだけなことは想像ついたのにヒント1だけ開けてしまって後悔。最後のほうにスマホのibis Paintで開けていじってたら暗い文字で何か書かれてるのを見つけて無事クリア
【Binary】 Secret Key
渡されたファイル開いたらELFと書かれていたので、Ghidraで見たらフラグ見つけた気がする
【PPC】 Swap members
配列でK離れた要素同士を入れ替えることができるとき、目標の配列にできるかという問題。modが同じ場所には動けるなぁ~と感じたのでBeforeとAfterをmod毎に比較した
【Shell】 XFD
おおきなファイル作ってそのsha256を答える問題。ShellわからんのでPythonで書いた。CRLFとLFがよくわからんくて大変だった。あとsha256を大文字で返す関数たたいてしまって間違えたりなどした
【OSINT】 timetable
バスの時刻表が渡される。僕的には本数少ない。載っているルート名で検索かけたら路線がでてきたので始発の時刻からバス停を特定
Lv.3
【PPC】 0→1
任意の部分文字列で0の数を1の数以下にしたいらしい。実験してみる。前からみていき、0があったらその後11が続けばよさそう
【Crypt】 Anomaly
RSA暗号。p, qわかってるので普通に解読できそう……?
【OSINT】 Bench
写真の場所を特定したい。4コママンガが街にあるってことはゆかりがありそう&後ろに乗船券うりばとフェリーのりばの標識があるのでそこからいけそう。市がわかったらGoogle Mapsでひたすら港沿いをストリートビューしてた。特徴的なガードレールをみつけたのでその周りよくみたらあった
【Shell】 Chase the flag!
フラグがファイル内を転々と逃げ回ってるらしい。ファイルがめっちゃたくさんあったのでとりあえず"CPCTF{"で検索するも対策済み。ファイル内に次のファイル名が書かれているので、Pythonでファイル名を検索して開くのを繰り返すようなプログラムを書くけどなぜかみつからない。手動でたどってみたら数ファイル目に複数の行先が書かれたフェイクがあったのでもう片方のファイル名を初期値にして実行してもまた失敗。仕方なくsearchじゃなくてfindallを使い、DFSみたいなのを書いて無事たどり着いた
【PPC】 Decrement or Mod Game
ゲームの勝敗予想。実験してみると数字が小さいほうは1減らすことしかできなく、大きいほうは相手が1のときにあまりに置き換えれば常に勝てる。初期値が1付近とA=B付近にコーナーケースがありそう(1敗)なのでそれを処理してAC
【Forensics】 Golden Protocol
Wiresharkいれたのに使わずに終わりそうでこわかったけどpcapファイルきてくれてよかった。調べるとメール通信っぽくて本文っぽいのをUnicodeに戻すとPPAPらしいことがわかる。なんか暗号書かれたメールがないと勘違いして鍵付きZIP解読ツールいれて走らせてしまった。待ってる間にもう一度見たら普通にパスワードあったのでそれを入力して無事ゲット
【Forensics】 I love MD
MD5のハッシュをぶつける。調べてでてきたのを入れた
【Misc】 LLM-powered Scheduler
PHPだったのでてっきりPHPの脆弱性かとおもっていろいろやったけどわからなかった。仕方なくヒントを開けたらプロンプトインジェクションらしいので脅迫したら教えてくれた
【OSINT】 Lethal
調べると記事が出てくる。そこにCVEが2020年1月あたりと出ているので頑張って探す。CVEをググったりしてもマルウェア名が出てこないので海外の記事のほうを頑張って探す。英語の記事をみてもいまいち何もひっかからないのでドイツ語かな~などと思いながらGrokのDeepSearchに聞いてみるとあっさり教えてくれた
【Shell】 Math Test
計算問題をがんばるだけ
【Web】 String Calculator
getFlagという関数を実行したいんだけどエスケープされてる括弧を使わずに実行する方法がわからない。どこにも情報がなくAIにしつこく聞いてたらバッククオートで代わりになるって教えてくれた
【PPC】 Toll Optimization
DPっぽいので残りのクーポン数も状態に持っちゃえばいいのでは!?という発想が割とすんなりとでてきた。うれしい
【Misc】 correctionless
QRコードは勉強したことあるのでできそうなのは分かったけどめんどい。ペイントでシンボルとかを適当に付け足すだけでQRリーダーが認識してくれないかな~と思ったけどそんなに甘くない。ツールを探してQRazyBoxというのに入れる。右上の「回」の下側で誤り訂正とマスクの正しい組み合わせがわかるので、解読機能を使ってフラグゲット

Lv.4
【Forensics】 Cached LLM
馬鹿なので再びプロンプトインジェクションをためす。結局わからずにヒント2まで開けてハッシュ衝突だと知る。衝突させたいキャッシュのハッシュを見つけてツールを使って探した文字列を突っ込めばゲット
【PPC】 More and more teleporter
最初は上り坂、テレポーターがあると蟻地獄みたいな感じ
【Crypt】 RSA Trial 2025
writeupで見たことあるような問題だ!ってなった。素数p,q,rを使うけどrはp+q以上の最小の素数らしい。等式3つの三元連立方程式かと勘違いして解こうとしたりした。大体のrを求めてから近い範囲を探索してみたらなんかいけた
【OSINT】 yellow_train
Google Lensで路線はわかったけどその後がわからない。Google Mapsで延々と線路の航空写真から場所を探そうとしたけどらちが明かないのでヒントを2つあける。配線図というものをのせてくれてるサイトがあったのでそこから線路が複雑になってそうな感じの駅をGoogle Mapsに突っ込むのを繰り返してたら無事ヒット。撮った場所かと思って何回か誤答したけどちゃんと問題文読み返してクリア
Lv.5
【OSINT】 Chaos Town
何度もいったことがあるので渋谷であることだけはわかった。
右下の広告から大体の時期が絞れて、画像検索で見つかった2022/4/19のブログに右奥の壁の高さが少し違う写真があったのでそのあたりだと見当をつける。これが間違ってた。
3回くらい試してみてもあたらなかったところで、Xでの検索を思いつき、渋谷駅とか東急東横店とかで時間指定検索するともっと前であることが判明。ここでヒントを開けてYouTubeというメディアの存在を思い出す。
手前に水滴があるので天気でも調べていく。3/19の雨の中散歩している動画を見つけたことと、雨の日の次に晴れるのが3/20と3/24だったので、この2つをローラーするがあたらない。
点数が下がってしまったのでヒント開けたら3/19だった。おしい
【OSINT】 Sweets
Xの画像を調べようと思ったけどGoogle Lensでみつからないのでヒント開けた。
今思うと、夜遅くて判断が適当になってた気がする。夜は寝ましょう。
Google画像検索したら出てきたのでブログを見る。
去年のwriteupでメールアドレスを調べたというのを思い出して一応調べてみるが何もない。
ここでヒント2つ目を開ける。
CTF OSINT ツールみたいに調べてでてきたID検索ツールをインストールしてXのIDとブログのAuthorを入れてみるが何も出てこない。
ここでヒント3をあけてしまう。ヒント適当に使いすぎ。
メールの@以前の部分をいれると書いてあってなるほどーってなった。YouTubeアカウントが見つかるのでそこからはがんばる。
おわりに
CTFめっちゃ面白かったです!!!
これからもいろいろと精進していきたいと思います
運営の方々、本当にありがとうございました!!