できなかった問題をwriteup等を参考に勉強した記録を残す。
この問題を解くカギは,ヒントのとおり,ネットでTransformツールを探し当てることだったようだ。
Transformation
フラグを加工したpython
''.join([chr((ord(flag[i]) << 8) + ord(flag[i + 1])) for i in range(0, len(flag), 2)])
ファイルencで与えられた文字列
灩捯䍔䙻ㄶ形楴獟楮獴㌴摟潦弸弲㘶㠴挲ぽ
ヒント
You may find some decoders online
encのバイナリ
e7 81 a9 e6 8d af e4 8d 94 e4 99 bb e3 84 b6 e5 bd a2 e6 a5 b4 e7 8d 9f e6 a5 ae e7 8d b4 e3 8c b4 e6 91 9f e6 bd a6 e5 bc b8 e5 bc b2 e3 98 b6 e3 a0 b4 e6 8c b2 e3 81 bd
picoCTF{}のpiを与えられたpythonで加工してみる
flag = "pi"
enc = ''.join([chr( (ord(flag[i]) << 8) + ord(flag[i + 1]) ) for i in range(0, len(flag), 2)])
print(ord(enc))
print(hex(ord(enc)))
結果
28777
0x7069
困った。encのバイナリと全然違う。
ここから他力。
解いた人は,online convertorを使ったと書いてる。
URLは書いてない。
online convertorで検索
みつからない
picoによくある「問題名=ヒント」でやってみる
Transformation decorde toolでググると
というのが見つかった。
試してみる
赤〇に pi の 28777 が見える
次の青〇の 17236 が co か?
flag = "co"
enc = ''.join([chr( (ord(flag[i]) << 8) + ord(flag[i + 1]) ) for i in range(0, len(flag), 2)])
print(ord(enc))
結果
25455
このコンバーターから数値を取り出す。
28777,25455,17236,18043,12598,24418,26996,29535,26990,29556,13108,25695,28518,24376,24370,13878,14388,25394,12413
ソルバー書く
trans = [28777,25455,17236,18043,12598,24418,26996,29535,26990,29556,13108,25695,28518,24376,24370,13878,14388,25394,12413]
i = 0
flag = ""
while i < len(trans):
flag = flag + chr(trans[i] >> 8)
flag = flag + chr(trans[i] & 0xff)
i = i + 1
print(flag)
ビンゴ
しかし, Burrows-Wheeler Transform が何やってるのか全くわからん。