Проверятор
Прогресс комнаты
0 / 4
Задание 1Введение
Цель: Обращать проверку ключа, а не перебирать его.
Программа проверяет лицензионный ключ. Ключ — это флаг. Восстановите его, не перебирая все варианты.
Задание 2Теория и инструменты
Программа XOR-ит каждый символ ввода с числом, зависящим от позиции, и сравнивает с эталонным списком.
Раз XOR обратим, достаточно применить ту же операцию к эталону: символ = эталон[i] ^ ключ(i).
Инструменты
- Python
- Любой отладчик — для бинарных программ
Больше теории — в разделе «Обучение: Реверс».
Задание 3Практика: найдите флаг
def check(s):
if len(s) != 30:
return False
data = [ord(c) ^ ((i * 7 + 13) & 0xFF) for i, c in enumerate(s)]
return data == [78, 64, 93, 89, 91, 3, 65, 13, 55, 63, 98, 52, 6, 55, 94, 5, 34, 238, 254, 225, 237, 255, 213, 157, 129, 216, 242, 164, 182, 165]
Пошаговый план — открывайте по одному шагу
- 1Найдите эталонный список чисел в коде.
- 2Выпишите формулу ключа для позиции i:
(i * 7 + 13) & 0xFF. - 3Для каждой позиции вычислите
chr(эталон[i] ^ ключ(i)). - 4Склейте символы — получится флаг.
Подсказки — каждая до решения стоит −50 очков
Задание 4Как защититься
Проверка лицензий на клиенте всегда обратима. Важную логику держите на сервере.
Разборы участников
Разборы открываются после того, как вы решите комнату, — чтобы не спойлерить ответ.