The app is writing flag somewhere… and it’s statically linked.
Solution
Первый взгляд
$ file mc3.elf
mc3.elf: ELF 64-bit LSB executable, x86-64, statically linked, stripped
Стрипнутый бинарь. В main видно, что программа что-то пишет, но куда?
int64_t main()
sub_408710("Hello!")
sub_408710("Now i will write the flag somewhere.")
sub_408710("See if you can find it!")
sub_400b17()
sub_408710("Ok, it's there")
sub_408710("Dunno if it was written OK, but i've done what i could")
sub_408710("Good luck!")
return 0
sub_400b17 — и есть то самое “написать куда-то”. Не буду разбирать статику, запущу под strace:
strace
$ strace ./mc3.elf
...
write(1, "Now i will write the flag somewh"..., 37) = 37
write(1, "See if you can find it!\n", 24) = 24
write(1337, "flag: c4ught_Wh4Ts_be1ng_wr1tten", 32) = -1 EBADF (Bad file descriptor)
write(1, "Ok, it's there\n", 15) = 15
...
Флаг пишется в файловый дескриптор 1337, которого нет. Поэтому программа считает, что “всё хорошо” — она записала, просто запись не прошла. strace поймал попытку.
c4ught_Wh4Ts_be1ng_wr1tten