← Все комнаты Путь «Реверс» →
ЭкспертРеверс Флаг Осенний CTF

Поворот, сложение, маска

Прогресс комнаты 0 / 4
Задание 1Введение

Цель: Обращать позиционное преобразование: «Поворот, сложение, маска».

Программа проверяет лицензионный ключ — это и есть флаг. Функция позиционная: data[i] = f(ord(key[i]), i). Восстановите ключ по коду, не перебирая весь ключ целиком.

Задание 2Теория и инструменты

Многие проверки ключа применяют к каждому символу обратимую операцию, зависящую от позиции: сдвиг, XOR, умножение на нечётное число, поворот битов, подстановку по таблице.

Если символ i зависит только от ord(key[i]) и i, ключ восстанавливается независимо по каждой позиции — перебором печатных символов, а не всего ключа.

Инструменты

  • Python: цикл for c in range(32, 127)
  • Отладчик (gdb / pdb) или просто чтение кода
  • CyberChef для проверки гипотез

Больше теории — в разделе «Обучение: Реверс».

Задание 3Практика: найдите флаг
Данные задания325 символов
def rol8(x, r):
    return ((x << r) | (x >> (8 - r))) & 0xFF

def check(key):
    if len(key) != 22:
        return False
    data = [rol8((ord(ch) + 0x1F) & 0xFF, 4) ^ (i & 7) for i, ch in enumerate(key)]
    return data == [38, 54, 84, 170, 29, 241, 63, 224, 53, 57, 58, 228, 61, 125, 35, 223, 231, 201, 55, 42, 172, 204]
Войдите, чтобы ответить

Пошаговый план — открывайте по одному шагу

  1. 1
    Найдите в коде массив, с которым сравнивается результат, и формулу f(c, i) (где c = ord(key[i])).

Подсказки — каждая до решения стоит −100 очков

Задание 4Как защититься

Проверка ключа на стороне клиента бесполезна: код доступен и обратим. Лицензии и секреты проверяйте на сервере, а код — обфусцируйте лишь как дополнительный барьер, не как защиту.

Разборы участников

Разборы открываются после того, как вы решите комнату, — чтобы не спойлерить ответ.