Загрузка данных


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