Memory Safe Strcmp

ELFファイル strcmp.bin が与えられた。

このファイルをGhidraで逆コンパイルすると、以下のmain関数があった。

An ELF file strcmp.bin was given.

Decompiling the file using Ghidra, I found this function main:

main.c

この中の 0x108930 をダブルクリックすると、以下の rust_rev_1::main 関数が出てきた。

Double-clicking 0x108930 in this function, this function rust_rev_1::main appeared:

rust_rev_1_main.c

この中に、thisから始まる文字列の各文字を固定の値と比較しているような部分があった。
前半と後半でそれぞれ後ろの文字から比較しているようだったので、重複しないように抜き出した。
そして、CyberChefで比較対象の文字を抽出し、順番を反転した。

In this function, I found a part that looks like comparing each characters of the string beginning from this with fixed values.
It looked like it is comparing each of the former and latter part from the characters on the end, so I extracted the parts excluding the duplicated part.
Then, I used CyberChef to extract the characters to compare, and reversed the order.

Regular expression, 2 more - CyberChef

この結果より、flagが得られた。

I obtained the flag from this result.

flag{396e4dc9691577d73210a2a}

SquareCTF 2021