![]() |
https://forum.antichat.xyz/attachmen...0186948413.png Гугл даёт нам Симфонию номер 40, но пока непонятно, в каком виде этот ответ ввести, и правильный ли он вообще. Поэтому кидаем файл вIDA - может, статический анализ нас спасёт. https://forum.antichat.xyz/attachmen...0186991942.png https://forum.antichat.xyz/attachmen...0187002707.png Так как этот таск - один из самых лёгких, то и условия у нас почти что лабораторные, словно автор вообще не подозревал, что этот файл будут ревёрсить. Сразу можно заметить fgets, принимающий наш ответ, а затем и strncmp, который сравнивает его с Strи в зависимости от результата нас кикает или пускает дальше. Если же перейти в память по Str, то увидим весьма тривиальную картину: https://forum.antichat.xyz/attachmen...0187055724.png Слова излишни, комментировать нечего. Пробуем Symphony 40: https://forum.antichat.xyz/attachmen...0187073158.png А дальше мы уже внезапно без всякой прелюдии должны ввести флаг. Глядя в код, можно понять, что тут уже будет поинтереснее: https://forum.antichat.xyz/attachmen...0187096910.png https://forum.antichat.xyz/attachmen...0188112446.png Здесь уже, во-первых, программе зачем-то понадобилась длина Str- А значит, функция sub_4015EF, в которую та передаётся, может что-то преобразовывать. Если мы перейдём в память и поглядим на Str1, с которой сравнивается наш флаг, то наши догадки лишь подтвердятся: https://forum.antichat.xyz/attachmen...0187171675.png Согласитесь, мало напоминает формат CODEBY{flag}. Значит, вышеупомянутая функция каким-то образом шифрует наш флаг в этот набор байт либо расшифровывает последний в наш флаг. Заглянем внутрь неё (переменные я переименовал для наглядности): https://forum.antichat.xyz/attachmen...0187195719.png Здесь (да и вообще при анализе псевдокода) очень пригодились бы знания об арифметике указателей и памяти в С (16 строка). Грубо говоря, можно провести аналогию: Код:
*(buf_pointer + offset) == buf_pointer[offset]Напишем вспомогательную программу на питуне: https://forum.antichat.xyz/attachmen...0187305797.png Обратите внимание, в 4 строке под конец списка xor_key добавляется нулевой байт - для имитации Сишных строк (почитайте, как вообще устроены строки в С - интересная тема). Предложенный Идой алгоритм устроен так, что сначала идёт проверка индекса, потом сразу же инкремент, а затем и операция. Поэтому добавить его надо, без него вы расшифруете лишь половину флага)) Запускаем: https://forum.antichat.xyz/attachmen...0187408700.png Флаг получен! Надеюсь, этот простенький райтап поможет вам в продвижении в нашем нелёгком деле. Удачного ревёрса! made 4@rev_with_da_boys |
Так то райтап норм, но мне кажется что через брейкпоинт в нужном месте решается легче и быстрее
|
| Время: 01:24 |