Новая Школа - онлайн-школа подготовки к ЕГЭ
Задача Задача №3756166
А
Аноним
23 октября 2026 12:26 · публичный вопрос
А
Аноним

Реши задание на изображении

Нейросеть23 октября 2026 12:26

Кратко: нужен перебор seed — времени в формате ЧЧММ. Для каждого варианта строится та же гамма, что и в encrypt.py, и делается XOR с secret.bin. Правильный seed даст читаемый флаг вида vsosh{...}.

import random
from pathlib import Path

def keystream(seed, n):
    r = random.Random(seed)
    return bytes(r.randrange(256) for _ in range(n))

def xor(data, key):
    return bytes(a ^ b for a, b in zip(data, key))

blob = Path("secret.bin").read_bytes()

for h in range(24):
    for m in range(60):
        seed = h * 100 + m  # именно так работает int("ЧЧММ")
        msg = xor(blob, keystream(seed, len(blob)))

        try:
            text = msg.decode("utf-8")
        except UnicodeDecodeError:
            continue

        if text.isprintable():
            print(f"seed = {h:02d}{m:02d}")
            print(text)

Почему это работает:

  1. random.Random(seed) при одинаковом seed всегда выдаёт одну и ту же последовательность.
  2. XOR обратим:
    \[ (m \oplus k)\oplus k = m. \]
  3. Время ЧЧММ даёт всего \(24 \cdot 60 = 1440\) вариантов — их легко перебрать.
  4. Ведущий ноль исчезает из-за int(...), поэтому 09:05 превращается в 905, а в коде это 9*100+5.

Запустите скрипт в одной папке с secret.bin; он выведет seed и исходное сообщение.

По фотографии точный флаг восстановить нельзя: последнее изображение — искажённое отображение двоичного файла, одного неверно прочитанного байта уже достаточно для ошибки. Можете прикрепить сам secret.bin или прислать hex-дамп его байтов?

Реши задание на изображении
**Кратко:** нужен перебор seed — времени в формате `ЧЧММ`. Для каждого варианта строится та же гамма, что и в `encrypt.py`, и делается XOR с `secret.bin`. Правильный seed даст читаемый флаг вида `vsosh{...}`. ```python import random from pathlib import Path def keystream(seed, n): r = random.Random(seed) return bytes(r.randrange(256) for _ in range(n)) def xor(data, key): return bytes(a ^ b for a, b in zip(data, key)) blob = Path("secret.bin").read_bytes() for h in range(24): for m in range(60): seed = h * 100 + m # именно так работает int("ЧЧММ") msg = xor(blob, keystream(seed, len(blob))) try: text = msg.decode("utf-8") except UnicodeDecodeError: continue if text.isprintable(): print(f"seed = {h:02d}{m:02d}") print(text) ``` Почему это работает: 1. `random.Random(seed)` при одинаковом seed всегда выдаёт одну и ту же последовательность. 2. XOR обратим: \[ (m \oplus k)\oplus k = m. \] 3. Время `ЧЧММ` даёт всего \(24 \cdot 60 = 1440\) вариантов — их легко перебрать. 4. Ведущий ноль исчезает из-за `int(...)`, поэтому `09:05` превращается в `905`, а в коде это `9*100+5`. Запустите скрипт в одной папке с `secret.bin`; он выведет seed и исходное сообщение. По фотографии точный флаг восстановить нельзя: последнее изображение — искажённое отображение двоичного файла, одного неверно прочитанного байта уже достаточно для ошибки. Можете прикрепить сам `secret.bin` или прислать hex-дамп его байтов?