Райтап на задачу «Учебная граната»

dikiyponos

Автор:

dikiyponos

6 ноября 2026

5

06.11.2026
Учебная граната
Категория:

Misc

Задача «Учебная граната»

AlexB

Автор:

AlexB

Первая кровь:
broken_reality
Сложность:
easy
Дата публикации:
11.10.2025
Решений:
83
Рейтинг:
5/5
Ссылка:
Решать

Скачаем файл. Посмотрим, что это за такое.

Решение задачи «Учебная граната»: иллюстрация 1

Оказывается, этот файл — ZIP-архив. Попробуем его распаковать.

Решение задачи «Учебная граната»: иллюстрация 2

Распаковав архив, мы получили ещё архив. А в этом архиве ещё архив. И так далее. Попробуем нажать прямо в интерфейсе Ctrl+H, чтобы показывать скрытые файлы.

Решение задачи «Учебная граната»: иллюстрация 3

Оказывается, что с каждым архивом мы получаем ещё скрытый файл — одну букву.

Решение задачи «Учебная граната»: иллюстрация 4
Решение задачи «Учебная граната»: иллюстрация 5

Продолжая распаковывать, мы получаем из этих букв нечто последовательное — ZIP. Вероятно, по каждой этой букве составляется некий текст. Напишем скрипт, который автоматически распакует эту «бомбу».

import io
import zipfile


def hidden_names(archive: zipfile.ZipFile) -> list[str]:
    return [name for name in archive.namelist() if name != "boom.zip"]


with open("bomb", "rb") as f:
    data = f.read()
names: list[str] = []
depth = 0
while True:
    archive = zipfile.ZipFile(io.BytesIO(data))
    names.extend(hidden_names(archive))
    if "boom.zip" not in archive.namelist():
        break
    data = archive.read("boom.zip")
    depth += 1
message = "".join(name[1:] if name.startswith(".") else name for name in names)

print(f"[+] nested archives: {depth}")
print(f"[+] hidden message ({len(message)} chars):")
print(message)
Решение задачи «Учебная граната»: иллюстрация 6

Остаётся только запустить скрипт и прочитать наше сообщение, которое скрыто в 1015 вложенных архивах.

Решение задачи «Учебная граната»: иллюстрация 7
Если вы нашли опечатку или ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter

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

Райтап на задачу «Гесс вот (Guess what)»

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

Райтап на задачу «Гесс вот (Guess what)»

Подбираем строку по позиции ошибки, разбираем её содержимое и обсуждаем ускорение перебора.
Прочитать

6

Райтап на задачу «Огрызок»

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

Райтап на задачу «Огрызок»

Определяем компактный формат Micro QR и считываем флаг с обрывка листа.
Прочитать

11