Райтап на задачу «Почувствуй радугу»

fderious

Автор:

fderious

31 октября 2026

9

31.10.2026
Почувствуй радугу
Категория:

Reverse

Задача «Почувствуй радугу»

Автор:

LastTeamLead

Первая кровь:
@excsawirq
Сложность:
easy
Дата публикации:
18.10.2025
Решений:
130
Рейтинг:
4.8/5
Ссылка:
Решать

Описание

Больше хешей — надёжнее. Или нет?

Решение

Для начала выполняем базовые действия для определения дальнейшего решения:

file md5_flag_checker
chmod +x md5_flag_checker
./md5_flag_checker
Определение типа и прав ELF-файла
Запуск программы проверки флага

Примерно поняли, что за зверь перед нами, поэтому открываем Ghidra и идём смотреть дизассемблированный код нашего ELF-файла. Не забываем прожать кнопку Analyze.

Открытие бинарника в Ghidra

Далее сразу идём смотреть, что находится в функции main.

А там мы наблюдаем много строк с последовательностью символов, которые как-то обрабатываются.

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

Проверим нашу гипотезу, крякнув первую строку. Это можно сделать, например, здесь.

Восстановление первого MD5-хеша

Получаем существующий ответ — B, букву, являющуюся первой в флаге. Допроверим гипотезу и при проверке следующих хешей также получим буквы последовательности BugCTF.

Остаётся лишь скопировать все хеши из Ghidra и собрать флаг:

Хеши символов флага в Ghidra

Задачу можно решить без использования веб-ресурсов полностью локально, например на Python:

import hashlib


CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_{}"
HASHES = """ """ # Скопируй сюда хэши из Ghidra по одному на каждую стркоу
HASHES = HASHES.splitlines() 
flag = ""

for i in range(24):
    curent_hash = HASHES[i]
    for j in range(len(CHARS)):
        current_char_hash = hashlib.md5(CHARS[j].encode()).hexdigest()
        if curent_hash == current_char_hash:
            flag += CHARS[j]
            break
            
print(flag)

Таск решён!

Если вы нашли опечатку или ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter

Также по теме:

Райтап на задачу «Прошлогодний флаг»

/Разборы задач

Райтап на задачу «Прошлогодний флаг»

Разбор задачи «Прошлогодний флаг» от fderious: изучаем бинарник в Ghidra и получаем флаг POST-запросом.
Прочитать

12

Райтап на задачу «Кости и Баги»

/Разборы задач

Райтап на задачу «Кости и Баги»

Разбор задачи «Кости и Баги»: декомпилируем Python-файл, снимаем обфускацию и восстанавливаем флаг.
Прочитать

7