WaniCTF 2023 Writeup

チームDCDCで参加して6位でした

基本的にRevを解き、なくなったらForensicをやってました。

 

Rev

Just_Passw0rd

strings just_password | grep FLAG

FLAG: FLAG{1234_P@ssw0rd_admin_toor_qwerty}

javersing

bytecode-viewerで見ます

 

文字の配置替えが行われています。ソルバ

eflag = list("Fcn_yDlvaGpj_Logi}eias{iaeAm_s")
index = [[eflag[i], (i * 7 % 30)] for i in range(30)]

for j in range(30):
    for i in index:
        if j == i[1]:
            print(i[0], end="")

python書いてない + CTFまともに出てないせいで、書くのに時間がかかったのは内緒です。

FLAG: FLAG{Decompiling_java_is_easy}

fermat

a*a*a* + b*b*b == c*c*cのときにフラグが出力されることがわかります。

ここでフェルマーの最終定理なのは分かりましたが、反例があることを僕は知りませんでした。

WaniCTF 2023 writeup - アルゴリズム弱太郎

break pointで止めてjumpしましょう。

- start

- b *main+191

- r

- 適当に数字入れる

check関数に入ると止められるので、

- j print_flag

FLAG: FLAG{you_need_a_lot_of_time_and_effort_to_solve_reversing_208b47bd66c2cd8}

theseus

inputを受け付けて、比較対象を生成します。

     

その後、1文字づつ比較してすべて一致すればコレクトです。

     

比較対象が出来上がって、おもむろに比較しているのでメモリとか見ればよさそうですよね。

- start

- b *main+464

- r

- "A" * 0x19を入力(多分足りてなくてもいい)

- 何回かnextしてメモリからひっぱりだされるのを待つ

ありますね。

FLAG: FLAG{vKCsq3jl4j_Y0uMade1t}

 

Forensic

正直、何を解いたのか記憶が少ないですが

Just_mp4

exiftool * | grep flag

base64されたflagが出てくるので、cyberchefに投げます。

FLAG: FLAG{H4v1n_fun_1nn1t}

lowkey_messedump

wiresharkで見るとusb通信かつ、データ量がなんか少なそうなのでキーボードの通信をキャプチャしたものであることが分かります。

前回こういう問題を解いたのでツールを知っていました。

github.com

FLAG{Big_br0ther_is_watching_y0ur_keyboard<DEL><DEL><DEL><DEL>0ard}<RET>

が復元されたので、delを合わせて

FLAG: FLAG{Big_br0ther_is_watching_y0ur_keyb0ard}

 

以上です。初心者卒業しているようにみえてどうせctf4bでボコられるので精進します。

運営のみなさん、楽しいCTFをありがとうございました。