angstromctf 2019 のメモ

最近、CTFに興味を持っているのでメモ書きとして解き方を残しておきます。

 

[Reversing] One Bite (60pt)

Onebiteというファイルが渡されるのでそこからフラッグを探してみようという問題。

手始めにfileコマンドで探ります。

ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=1378c7ef8cdf59c2cbe4d84274295b2567a09e91, not stripped

Linuxで動くねと言いつつもGhidraを使いました。

f:id:kai1098701:20190618103933p:plain

調べた結果です。

004006faの部分でxorしているのでここが肝心だと思いました。0x3cと比べているのでxorして最終的には"]_HZGUcHTURWcUQc[SUR[cHSc^YcOU_WA"になれば良いとわかりました。xorは一回xorされていてももう一回やり直せば元に戻るという性質があるのでやってあげたら良さそうだとわかりました。

そこで復元コードを作ってあげようと思ったのですがどのように作ればいいかわからなかったのでここですごく迷いました。Pythonにxorできる符号があると知らなかったのでやってあげました。そのコードがこちらです。bytesの後に[]を入れるのに気づかず苦戦しました。皆様もお気をつけください。

file10 = "]_HZGUcHTURWcUQc[SUR[cHSc^YcOU_WA"

xor = 0x3c

flag = b""
for i in file10:
flag += bytes([ord(i) ^ xor])
print(flag)

 実行結果は

actf{i_think_im_going_to_be_sick}となり、正解となりました。