# harmagedon [InterKosenCTF2020] ###### tags: `InterKosenCTF2020` ## 概要 `_start`しかない小さいx64 ELFが貰える。 0. r10, rbxに0を代入。 1. r10をインクリメント。rbxが0x0B77C7Cならクリア。 2. 0x0Bがr10より小さければ失敗。→フラグは11文字。 3. 4文字の選択肢を`buf[rbx]`から取得、表示する。 4. 選択肢に応じてrbxに0〜3を足し、インクリメントして2ビット左シフト ## 解法 一回ごとに2ビット消費するが、フラグの文字数は12なので全部で24ビット。0xb77c7cはちょうど24ビットなので合ってそう。あとは逆順に戻せば正しい選択肢が出てくる。 ```python from ptrlib import * answer = 0x0B77C7C clist = [] for i in range(11): answer >>= 2 answer -= 1 clist.append(answer & 0b11) clist.reverse() p = Process("./harmagedon") flag = "" for c in clist: p.recvuntil("? [") x = chr(p.recvuntil("]")[c]) flag += x p.sendline(x) print(flag) p.interactive() ``` `Ruktun0rDi3` ## 感想・意見 - easyで良いと思う - バイナリがすっきりしてスッキリ!