HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > БЕЗОПАСНОСТЬ И УЯЗВИМОСТИ > Этичный хакинг или пентестинг > Задания/Квесты/CTF/Конкурсы
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 05.07.2024, 17:55
Don Reverso
Новичок
Регистрация: 17.05.2025
Сообщений: 0
С нами: 524585

Репутация: 0
По умолчанию

  • Название:Классика
  • Категория:reverse
  • Платформа:antichat
В архиве нас ждут 2 файла -classic.elfиclassic.exe, под разные платформы. Запускаем любой и наблюдаем следующую картину:

Гугл даёт нам Симфонию номер 40, но пока непонятно, в каком виде этот ответ ввести, и правильный ли он вообще. Поэтому кидаем файл вIDA - может, статический анализ нас спасёт.






Так как этот таск - один из самых лёгких, то и условия у нас почти что лабораторные, словно автор вообще не подозревал, что этот файл будут ревёрсить. Сразу можно заметить fgets, принимающий наш ответ, а затем и strncmp, который сравнивает его с Strи в зависимости от результата нас кикает или пускает дальше. Если же перейти в память по Str, то увидим весьма тривиальную картину:



Слова излишни, комментировать нечего. Пробуем Symphony 40:



А дальше мы уже внезапно без всякой прелюдии должны ввести флаг. Глядя в код, можно понять, что тут уже будет поинтереснее:






Здесь уже, во-первых, программе зачем-то понадобилась длина Str- А значит, функция sub_4015EF, в которую та передаётся, может что-то преобразовывать. Если мы перейдём в память и поглядим на Str1, с которой сравнивается наш флаг, то наши догадки лишь подтвердятся:



Согласитесь, мало напоминает формат CODEBY{flag}. Значит, вышеупомянутая функция каким-то образом шифрует наш флаг в этот набор байт либо расшифровывает последний в наш флаг. Заглянем внутрь неё (переменные я переименовал для наглядности):



Здесь (да и вообще при анализе псевдокода) очень пригодились бы знания об арифметике указателей и памяти в С (16 строка). Грубо говоря, можно провести аналогию:

Код:
*(buf_pointer + offset) == buf_pointer[offset]


IDA часто любит так писать взаимодействия с массивами, к этому надо привыкнуть. Из кода можно понять, что каждый элемент того набора байт ксорится с соответствующим символом Str, причём ксор происходит циклично (строка 12), из-за чего разница в длинах не является помехой. А так как XOR- самообратимая операция, то всё, что нам нужно - взять этот массив и поксорить с Symphony 40 - и мы получим наш флаг!

Напишем вспомогательную программу на питуне:



Обратите внимание, в 4 строке под конец списка xor_key добавляется нулевой байт - для имитации Сишных строк (почитайте, как вообще устроены строки в С - интересная тема). Предложенный Идой алгоритм устроен так, что сначала идёт проверка индекса, потом сразу же инкремент, а затем и операция. Поэтому добавить его надо, без него вы расшифруете лишь половину флага))

Запускаем:



Флаг получен! Надеюсь, этот простенький райтап поможет вам в продвижении в нашем нелёгком деле.

Удачного ревёрса!

made 4@rev_with_da_boys
 
Ответить с цитированием

  #2  
Старый 09.07.2024, 01:47
Cruel Lord
Новичок
Регистрация: 29.08.2023
Сообщений: 0
С нами: 1427397

Репутация: 0
По умолчанию

Так то райтап норм, но мне кажется что через брейкпоинт в нужном месте решается легче и быстрее
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.