Автор: Malwarya
Ссылка на таск Codeby:
https://codeby.games/categories/forensics/5e2a41de-ce6f-4f1c-9057-bd3f82912b40
Описание задания
Жизнь – матрёшка: ждёшь новое, а получаешь старое
Решение
Нам дан архив с названием flag_A1. Паролем от него является название архива внутри, т.е. flag_B2. Флаг находится в последнем архиве
Напишем скрипт, для автоматизации процесса распаковки
import zipfile
import os
# Установка начального архива и его пароля
current_zip = "flag_A1.zip"
password = ""
while True:
# Проверка на существование файла
if not os.path.isfile(current_zip):
print(f"Архив {current_zip} не найден.")
break
# Распаковка архива с использованием текущего пароля
try:
with zipfile.ZipFile(current_zip, 'r') as zip_ref:
zip_ref.extractall(pwd=bytes(password, 'utf-8'))
except RuntimeError as e:
print(f"Ошибка при распаковке {current_zip}: {e}")
break
# Получение следующего файла архива
# предполагаем, что в каждом архиве только один следующий архив
with zipfile.ZipFile(current_zip, 'r') as zip_ref:
next_zip = None
for file_name in zip_ref.namelist():
if file_name.endswith('.zip'):
next_zip = file_name
break
# Если в архиве не нашлось нового zip файла, завершаем работу
if not next_zip:
print(f"Достигнут конец матрёшки: в {current_zip} нет других архивов.")
break
# Установка пароля для следующего архива как имя текущего архива без расширения
password = os.path.splitext(current_zip)[0]
# Обновление текущего архива для следующей итерации
current_zip = next_zip
print(f"Переход к {current_zip} с паролем {password}")
print("Распаковка завершена.")
Запускаем код
Получаем флаг
Tags: