Flare-On 2019. Решение. Задача №9.

Flare-On 2019. Решение. Задача №9.

https://t.me/hacker_sanctuary

Подробнее про Flare-On.

Flare-On - ежегодный конкурс, который проводит компания Fire-eye. Конкурс включает в себя 12 задач на обратную разработку (reverse) и чаще всего в нём принимают участия ревёрс-инженеры/вирусные аналитики/исследователи и все остальные специалисты, кто так или иначе связан с ковырянием в бинарном коде.

Конкурс проводится с 2014 года. В этом году он также проводился (в конце августа-начале сентября). И хотелось бы разобрать задания с данного конкурса поочерёдно. Официальный разбор есть на сайте компании Fire-eye (https://www.fireeye.com/blog/threat-research/2019/09/2019-flare-on-challenge-solutions.html), а также разбор на русском от a1exdandy на хабре (https://habr.com/ru/company/dsec/blog/469393/)

Так что, если вам захочется узнать ещё варианты и подходы к решению, то можете прочитать их в разных источниках (наверняка ещё кто-то из победителей сделал свои райтапы).

Предыдущие решения.

Задача №1 - ссылка

Задача №2 - ссылка

Задача №3 - ссылка

Задача №4 - ссылка

Задача №5 - ссылка

Задача №6 - ссылка

Задача №7 - ссылка

Задача №8 - ссылка

Задача №9 - reloadered

Распаковываем архив и получаем два файла (бинарный + описание).

Снова у нас исполняемый файл под Windows 32bit. Посмотрим на описание.

В описании сказано, что это простая задача и нужно просто ввести верный пароль и мы получим ключ. Также есть указание, что при решении задания с помощью Ghidra могут возникнуть проблемы.

Загрузим исполняемый файл в ID'у.

При беглом анализе кода проверки пароля, можно заметить, что возможно несколько верных паролей. При этом пароль используется как ключевая последовательность для XOR'а с некоторым блобом в памяти.

Выглядит довольно странно, получается, что нужно брутить и вариантов достаточно много. Да и к тому же это 9-ое задание и врятли оно настолько просто и топорно решается.

Если немного "осмотреться" вокруг main то можно заметить очень странный блоб из команд "nop" (эта команда ничего не делает, и просто переходит к следующей инструкции).

Выглядит довольно подозрительно. Возможно туда помещается некоторый код во время выполнения программы. Поставим точку остановки прямо на старте программы и посмотрим на секцию nop-ов.

У нас появились инструкции и байты, но отображаются они не совсем корректно.

Самый просто способ это сдампить всё с помощью idaapi и после пропатчить оригинальный бинарь с последующей перегрузкой его в IDA.

В итоге получим небольшую функцию, которая в начале инициализирует некоторый блоб данных, который после будет обработан и по-XOR-ен с нашим вводом.

Момент инициализации

Момент преобразования блоба.

Код в начале функции активно проверяет запущен ли он на реальном оборудовании а не на виртуальной машине. Также есть проверки находится ли он под отладкой.

После всех проверок происходит преобразование выше описанного буфера и происходит запрос ввода ключа с клавиатуры.

После ввода вычисляется размер введённого буфера. Далее происходит XOR с преобразованным буфером.

И после XOR-а проверяется что в флаге есть подстрока с "@flare-on.com". Таким образом мы можем повторить этот код и про-XOR-ить необходимую строку с последними 13 символами блоба из памяти (блоб имеет размер 52 байта и делится на 4 нацело, что означает при циклическом наложении ключа, что мы можем получить ключ по последним 13-байтам блоба).

Сделаем небольшой скрипт и запустим его.

В итоге получим флаг.

Вот такой довольно простой но интересный таск.

Report Page