/Разборы задач
6 ноября 2026
Райтап на задачу «Гесс вот (Guess what)»
Подбираем строку по позиции ошибки, разбираем её содержимое и обсуждаем ускорение перебора.6
5

Misc
Задача «Учебная граната»
Скачаем файл. Посмотрим, что это за такое.
Оказывается, этот файл — ZIP-архив. Попробуем его распаковать.
Распаковав архив, мы получили ещё архив. А в этом архиве ещё архив. И так далее. Попробуем нажать прямо в интерфейсе Ctrl+H, чтобы показывать скрытые файлы.
Оказывается, что с каждым архивом мы получаем ещё скрытый файл — одну букву.
Продолжая распаковывать, мы получаем из этих букв нечто последовательное — 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)
Остаётся только запустить скрипт и прочитать наше сообщение, которое скрыто в 1015 вложенных архивах.