Author: @greg0r0
Занятный факт - в соответствии с некоторым толкованием стандартов строкой можно назвать любую последовательность байт, которая заканчивается нулевым байтом (0x00).
ptctf{1ts_y0ur_f1rst_r34l_r3v3rs3_t4sk?}
Тут уже не получится просто стрингануть бинарь :)
Если открывать файл в любом инструменте для проведения анализа бинарей, то надо идти от того, что сравнивается. Для начала проверим что strncmp является библиотечной функцией - тут все ок.
Значит надо проверить значение, с которым все сравнивается. Один из аргументов - это буффер ввода. Другой - вроде как указывает на флаг, но флаг то фейковый...
Хотя если посмотреть cross-references (места, где эта переменная используется) - то можно заметить, что флаг то используется в двух разных функциях!
Смотрим, что в эту функцию записывается оффсет поксоренного значения - тут и расшифровывается настоящий флаг. А сама фукнция помещена в .init_array. Это массив функций, который выполняется перед вызовом main.
Подробнее про .init_array и запуск программы можно почитать, например, тут.