チャレンジ一覧

絞り込みを解除

30 問 (2 / 2 ページ)

プログラミングLevel 3★★★☆☆

プログラミング - メモリダンプの解析

起動のたびに乱数で作られた合成メモリイメージ memory.img を解析します。先頭のヒープ管理表(先頭8バイト HEAPTBL + NUL・count(uint16)・エントリ(addr: uint32、size: uint16、flags: uint8、すべてリトルエンディアン))で live(flags=1)になっているアドレスの領域だけが現在の値で、解放済みの領域や管理表に載っていない残骸は古いデータです。各領域は `ALLOC:0x<4桁の小文字16進アドレス>:` + 長さ(uint16、リトルエンディアン)+ データで、データは MD5("heap-0x<4桁の小文字16進アドレス>") のダイジェストを繰り返し XOR すると `p<番号>=<4文字>` の断片に復号できます。live の断片を番号の昇順に4文字ずつつないだ40文字(小文字英数字)が答えです。答えを `python3 challenge.py '<答え>'` に渡すと、正解のときだけフラグが表示されます。

プログラミングLevel 3★★★☆☆

プログラミング - 既知平文攻撃

起動のたびに乱数で作られた証拠ファイル ciphertext.b64 と known.txt を解析します。ciphertext.b64 は観測所の報告書を、英小文字だけの短い鍵(長さは不明)で繰り返し XOR して Base64 にしたもので、known.txt は報告書の冒頭部分の平文です。報告書を復号すると `RESULT: unlock-code=...` という行があり、その unlock-code の値(16文字)が答えです。取り消された古いコードも書かれているので取り違えないでください。答えを `python3 challenge.py '<答え>'` に渡すと、正解のときだけフラグが表示されます。

プログラミングLevel 3★★★☆☆

プログラミング - 独自プロトコルの解析

protocol.bin は起動のたびに作られるバイナリのキャプチャです(/challenge にあります)。KINO で始まる長さつきのフレームがいくつか並んでいます。フレームを先頭から順にたどり、type=3 のフレームの payload を 0x23 で XOR 復号するとフラグが現れます。フラグは平文では置かれていません。

プログラミングLevel 3★★★☆☆

プログラミング - 画像ステガノグラフィ

image.pgm は起動のたびに作られるテキスト形式(P2)の PGM 画像です(/challenge にあります)。画素値の最下位ビット(LSB)を先頭から集め、8ビットずつ1バイトにまとめて読むと、NUL(0 のバイト)の手前までがフラグです。フラグは平文では置かれていません。

暗号Level 3★★★☆☆

暗号解析 - RSA共通モジュラス攻撃

2つのシステムが同じRSAの法nを使い回し、公開指数だけを変えていました。同じメッセージを e1 と e2 で暗号化した暗号文 c1, c2 が漏れています(public_keys.txt、ciphertexts.txt)。nは素因数分解できませんが、秘密鍵なしでメッセージを取り戻し、フラグを提出してください。

暗号Level 3★★★☆☆

暗号解析 - 小さい素数のDiffie-Hellman

古いIoT機器が36ビットしかない素数pでDiffie-Hellman鍵共有をしていました。handshake.txtには p, g, A = g^a mod p, B = g^b mod p と、共有鍵から作った鍵ストリームで暗号化された設定データがあります。離散対数を解いて共有鍵を求め、設定データに含まれるフラグを取り出してください。鍵ストリームの作り方はREADME.mdにあります。