from Crypto.Util.strxor import strxor
import binascii
# Читаем оригинальный output.txt из задания
with open("output.txt", "r") as f:
encrypted_hex = f.read().strip()
encrypted_data = binascii.unhexlify(encrypted_hex)
known_prefix = b"DUCKERZ{"
# Перебираем возможные длины ключа из enc.py (random.randint(12, 44))
for key_size in range(12, 45):
if len(encrypted_data) % key_size != 0:
continue
# Предполагаем ключ по первому вхождению префикса
potential_key = strxor(encrypted_data[:len(known_prefix)], known_prefix)
# Генерируем полный расширенный ключ для всей длины текста
factor = len(encrypted_data) // key_size + 1
expanded_key = (potential_key * factor)[:len(encrypted_data)]
# Расшифровываем
decrypted = strxor(encrypted_data, expanded_key)
# Проверяем, читаемый ли получился флаг
if decrypted.startswith(known_prefix):
try:
flag = decrypted.decode('utf-8', errors='ignore')
print(f"Найден ключ (длина {key_size}): {potential_key}")
print(f"Флаг: {flag}")
break
except:
continue