📝

picoCTF Transformation writeup

2021/10/18に公開

問題

『これは本当何なのかしら…』という文言と共にencというファイルと
pythonのコードと思しきコードが与えられます。

''.join([chr((ord(flag[i]) << 8) + ord(flag[i + 1])) for i in range(0, len(flag), 2)])

encの中身は湯呑みたいになってます。

灩捯䍔䙻ㄶ形楴獟楮獴㌴摟潦弸彤㔲挶戹㍽

解くためにやったこと

まず読む気がしないpythonのコードが何をしてるかを見ます。
恐らく平文を二文字ずつbitとして結合させてるんですかね。
フラグの形式から予測すると最初のpiの合体ロボでしょう。
試しにこの3文字をbitに変換してみました。

julia> bitstring(Int16('灩'))
"0111000001101001"

julia> bitstring(Int8('p'))
"01110000"

julia> bitstring(Int8('i'))
"01101001"

この通り単純に上位8bitと下位8bitを別々に文字として出力すればFLAGが取れそうです。

ソルバ

c = "灩捯䍔䙻ㄶ形楴獟楮獴㌴摟潦弸彤㔲挶戹㍽"

for i in c
    print(Char(Int(i) >> 8))  #上位8bitは右シフト演算で取得
    print(Char(Int(i) & 255)) #下位8bitは255とのAND演算で取得
end
GitHubで編集を提案

Discussion