Passcode2

ELFファイルpasscode2が与えられた。

Ghidraで逆コンパイルしてみると、 entry関数から__libc_start_main関数がFUN_00101175関数などを引数として呼び出されていた。
FUN_00101175関数は以下のものである。

A ELF file passcode2 was given.

Decompiling via Ghidra, I found that the function entry is calling the function __libc_start_main with the function FUN_00101175 as one of the arguments.
This is the function FUN_00101175:

FUN_00101175.c

この関数は、入力を読み込んだ後、その長さが0xbであり、かつ各バイトがlocal_124の対応する要素に0x2aをXORした値と一致していれば、 入力データをflag{}の間に入れて出力するようであった。

TDM-GCCobjdumppasscode2を逆アセンブルすると、 以下のように-0x11c(%rbp)を起点とする領域のデータに0x2aをXORしているので、 local_124-0x11c(%rbp)に対応することが読み取れた。

This function reads input and checks if the length of the input is 0xb and each bytes in the input are equal to the corresponding element oflocal_124, exclusive-ored with 0x2a. If the input passes the check, it prints the input data between flag{ and }.

I disassembled passcode2 via objdump in TDM-GCC. I found that local_124 corresponds to -0x11c(%rbp) because exclusive-or with 0x2a is calculated for data starts from -0x11c(%rbp) like this:

1404: 48 8d 8d e4 fe ff ff lea -0x11c(%rbp),%rcx 140b: 48 8b 55 f8 mov -0x8(%rbp),%rdx 140f: 48 01 ca add %rcx,%rdx 1412: 0f b6 12 movzbl (%rdx),%edx 1415: 83 f2 2a xor $0x2a,%edx

さらに、以下の部分で-0x11c(%rbp)にデータを設定している。

Also, this part sets some data to -0x11c(%rbp).

12b6: c6 85 e4 fe ff ff 18 movb $0x18,-0x11c(%rbp) 12bd: c6 85 e5 fe ff ff 1f movb $0x1f,-0x11b(%rbp) 12c4: c6 85 e6 fe ff ff 04 movb $0x4,-0x11a(%rbp) 12cb: c6 85 e7 fe ff ff 79 movb $0x79,-0x119(%rbp) 12d2: c6 85 e8 fe ff ff 4f movb $0x4f,-0x118(%rbp) 12d9: c6 85 e9 fe ff ff 5a movb $0x5a,-0x117(%rbp) 12e0: c6 85 ea fe ff ff 04 movb $0x4,-0x116(%rbp) 12e7: c6 85 eb fe ff ff 18 movb $0x18,-0x115(%rbp) 12ee: c6 85 ec fe ff ff 1a movb $0x1a,-0x114(%rbp) 12f5: c6 85 ed fe ff ff 1b movb $0x1b,-0x113(%rbp) 12fc: c6 85 ee fe ff ff 1e movb $0x1e,-0x112(%rbp) 1303: c6 85 ef fe ff ff 00 movb $0x0,-0x111(%rbp)

このデータを読み取り、0x2aをXORすると、25.Sep.2014となった。
25.Sep.2014flag{}の間に入れることで、flagが得られた。

I read the data and applied exclusive-or with 0x2a. This resulted in 25.Sep.2014.
I obtained the flag by putting 25.Sep.2014 between flag{ and }.

From Hex, XOR - CyberChef

flag{25.Sep.2014}

setodaNote CTF