この大会は2017/2/25 11:00(JST)~2017/2/25 19:00(JST)に開催されました。
今回もチームで参戦。結果は135点で70チーム中7位でした。
自分で解けた問題をWriteupとして書いておきます。
For001 (For 20)
LSB.pngが与えられている。ファイル名から考えてもLSBにフラグが隠されているに違いない。
Stegsolveで開き、[Analyse]-[Data Extract]からExtract Preview画面を表示し、
Red, Green, Blueの0を選択して、Previewを見ると、ZIPフォーマットが見える。
Save Binでout.binとして保存。
$ file out.bin
out.bin: Microsoft Word 2007+
Wordで開いてみると、モールス信号が書いてある。
. .- ... -.-- ..-. --- .-. . -. ... .. -.-.
デコードすると、easyforensic
$ echo -n easyforensic | sha1sum 1f0aa393d3e5369f391c35a793bcf1178b8299a0 -
WhiteHat{1f0aa393d3e5369f391c35a793bcf1178b8299a0}
Crypto002 (Crypto 20)
暗号化スクリプトと暗号化した画像ファいるが与えられている。スクリプトから8バイトの鍵でXORをとっていることがわかる。
そこでXOR鍵を求め、それから元の画像を復元する。
with open('out.png', 'rb') as f: data = f.read() PNG_HEAD = [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a] key = [] for i in range(len(PNG_HEAD)): key.append(ord(data[i]) ^ PNG_HEAD[i]) flag = '' for i in range(len(data)): code = ord(data[i]) ^ key[i%len(key)] flag += chr(code) with open('images.png', 'wb') as f: f.write(flag)
復号した画像にflagが書いてある。
Too_easy_right?
$ echo -n "Too_easy_right?" | sha1sum 5356be1427d77ea27062cb5417c887b01a019e11 -
WhiteHat{5356be1427d77ea27062cb5417c887b01a019e11}
Re001 (Re 15)
jarファイルが与えられている。このファイルをJD-UGIで開くと、以下のコード部分がフラグに関係していそう。
: Character[] ListChar = { Character.valueOf('a'), Character.valueOf('_'), Character.valueOf('y'), Character.valueOf('l'), Character.valueOf('_'), Character.valueOf('l'), Character.valueOf('a'), Character.valueOf('T'), Character.valueOf('_'), Character.valueOf('T'), Character.valueOf('_'), Character.valueOf('T'), Character.valueOf('e'), Character.valueOf('_'), Character.valueOf('y'), Character.valueOf('e'), Character.valueOf('r'), Character.valueOf('_'), Character.valueOf('S'), Character.valueOf('_'), Character.valueOf('_'), Character.valueOf('l'), Character.valueOf('r'), Character.valueOf('T'), Character.valueOf('F'), Character.valueOf('_'), Character.valueOf('Y'), Character.valueOf('_'), Character.valueOf('l'), Character.valueOf('e'), Character.valueOf('T'), Character.valueOf('T'), Character.valueOf('T'), Character.valueOf('a'), Character.valueOf('r'), Character.valueOf('T'), Character.valueOf('u'), Character.valueOf('A'), Character.valueOf('o') }; int[] ListPos = { 11, 7, 14, 13, 26, 22, 4, 34, 15, 37, 3, 31, 19, 27, 23, 6, 18, 25, 30, 24, 17, 12, 9, 38, 28, 8, 0, 16, 21, 10, 32, 36, 33, 20, 5, 35, 2, 29, 1 }; : public String generateFlag() { String flag = ""; Character[] tmpListChar = { Character.valueOf('\0'), Character.valueOf('\0'), Character.valueOf('\0'), Character.valueOf('\0'), Character.valueOf('\0'), Character.valueOf('\0'), Character.valueOf('\0'), Character.valueOf('\0'), Character.valueOf('\0'), Character.valueOf('\0'), Character.valueOf('\0'), Character.valueOf('\0'), Character.valueOf('\0'), Character.valueOf('\0'), Character.valueOf('\0'), Character.valueOf('\0'), Character.valueOf('\0'), Character.valueOf('\0'), Character.valueOf('\0'), Character.valueOf('\0'), Character.valueOf('\0'), Character.valueOf('\0'), Character.valueOf('\0'), Character.valueOf('\0'), Character.valueOf('\0'), Character.valueOf('\0'), Character.valueOf('\0'), Character.valueOf('\0'), Character.valueOf('\0'), Character.valueOf('\0'), Character.valueOf('\0'), Character.valueOf('\0'), Character.valueOf('\0'), Character.valueOf('\0'), Character.valueOf('\0'), Character.valueOf('\0'), Character.valueOf('\0'), Character.valueOf('\0'), Character.valueOf('\0') }; int lenFlag = this.ListChar.length; for (int i = 0; i < lenFlag; ++i) { tmpListChar[this.ListPos[i]] = this.ListChar[i]; } for (i = 0; i < lenFlag; ++i) { flag = flag + tmpListChar[i]; } return flag; } :
プログラムでフラグを構成してみる。
list_c = ['a', '_', 'y', 'l', '_', 'l', 'a', 'T', '_', 'T', '_', 'T', 'e', '_', 'y', 'e', 'r', '_', 'S', '_', '_', 'l', 'r', 'T', 'F', '_', 'Y', '_', 'l', 'e', 'T', 'T', 'T', 'a', 'r', 'T', 'u', 'A', 'o'] list_pos = [11, 7, 14, 13, 26, 22, 4, 34, 15, 37, 3, 31, 19, 27, 23, 6, 18, 25, 30, 24, 17, 12, 9, 38, 28, 8, 0, 16, 21, 10, 32, 36, 33, 20, 5, 35, 2, 29, 1] flag = ['\0'] * 39 for i in range(len(list_c)): flag[list_pos[i]] = list_c[i] print ''.join(flag)
flagは You_are__really___really____FASTTTTTTTT
$ echo -n You_are__really___really____FASTTTTTTTT | sha1sum 1e69c12b7b2bb6b895d39c4776ef8b34489149ab -
WhiteHat{1e69c12b7b2bb6b895d39c4776ef8b34489149ab}