この大会は2020/4/25 19:30(JST)~2020/4/27 1:00(JST)に開催されました。
今回もチームで参戦。結果は 620点で144チーム中77位でした。
自分で解けた問題をWriteupとして書いておきます。
Plain-t.. uh Image (Crypto)
jpgのフォーマットを考えながら、少しずつ平文が判明した部分のXOR鍵を求める。40バイト分見つかったら、復号できる。
def str_xor(s1, s2): return ''.join(chr(ord(a) ^ ord(b)) for a, b in zip(s1, s2)) with open('flag.jpg.enc', 'rb') as f: enc = f.read() key = '' JPG_HEAD = '\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01' key += str_xor(enc[:len(JPG_HEAD)], JPG_HEAD) DATA1 = 'ghijstuvwxyz' key += str_xor(enc[0x19c:0x19c+len(DATA1)], DATA1) DATA2 = 'Zcdefghijstuvwxy' key += str_xor(enc[0x270:0x270+len(DATA2)], DATA2) flag = '' for i in range(0, len(enc), 40): flag += str_xor(enc[i:i+len(key)], key) #flag += enc[i+len(key):i+40] #flag += '*' * (40 - len(key)) with open('flag.jpg', 'wb') as f: f.write(flag)
ijctf{l0ng_k3Y_Doe5nt_me4n_s3cur3}