Событие | Название | Категория | Сложность |
---|---|---|---|
VKA-CTF`2020 | Военный криптограф | Криптография | АБИТУРА |
Автор: Lex_SD
Все довольно просто. Вот программа, которая хеширует данные (main.py), вот слово, которое необходимо захешировать (cybersecurity). Правда программу эту писал какой-то курсант, так что я бы не ручался за корректность ее работы. Но вы конечно проверьте и сдайте хеш вместо флага.
Программа написана на ЯП python, все исходные коды на руках. Пытаемся захешировать слово, которое было дано по заданию. Получаем хеш:
cybersecurity -> c72336d6ed47926dcce8c1ac3d6986ec
Пытаемся сдать флаг, выясняем, что он неверные.
После внимательно читаем описание и понимаем, что в программе могла быть допущена ошибка.
Начинаем исследовать исходный код. Понимаем, что main.py
и mw.py
не представляют интереса - предназначены для вывода gui через PyQt. Переходим к файлу hash.py
.
Пристально изучаем код и понимаем, что это реализация md5 алгоритма по соответствующему RFC. Здесь либо сразу используем любую программу для подсчета md5, либо продолжаем искать в чем подвох. Ищем отличия. Не трудно будет заметить этот участок кода:
# step 3
# init buffer (little endian)
A = 0xcafebabe
B = 0xdeadbeef
C = 0x13371337
D = 0xbaadc0de
Понимаем, что константы были изменены. Меняем обратно на стандартные:
A = 0x67452301
B = 0xefcdab89
C = 0x98badcfe
D = 0x10325476
Снова запускаем программу и вычисляем хеш:
cybersecurity -> b03a894e101746d09277f1f255cc8a40
Сдаем как флаг и убеждаемся, что он верный.
Флаг:
b03a894e101746d09277f1f255cc8a40