Прошедшая неделя (пока что!) побила рекорд этого лета: целых 19 решений! Мы настолько за вас рады, что забыли опубликовать райтап. Исправляемся.
Начнем, пожалуй, со скорборда:
- rinagert512 - 836 PTS
- kekov - 797 PTS
- revker - 450 PTS
- GabrielFreak - 436 PTS
- maximadrian - 396 PTS
- LockeeLamora - 367 PTS
- falamous - 349 PTS
- k0lt1ra - 328 PTS
- Rmk1337 - 278 PTS
- kamikadzem22 - 268 PTS
- None - 226 PTS
- jkoimni - 215 PTS
- ajanshd - 184 PTS
- rozetkinrobot - 142 PTS
- None - 128 PTS
- None - 126 PTS
- khabarov_oleg - 123 PTS
- awawa0_0 - 121 PTS
- None - 118 PTS
А теперь возвращаемся к решению. Пойти можно было двумя путями.

Вариант первый, всё-таки, с реверсом:
-> Дизассемблируешь в ИДЕ.
-> Видишь, что 2 аргумента должны быть выданы программе ( if(argc < 3) return; ).
-> Видишь, что имя пользователя в циклах сначала переставляет имя задом наперед, а потом цикл меняет i-ый символ с i+3-ым символом (по модулю длины строки).
-> Далее видишь, что дата окончания пропуска — это число, переведенное из арабских в римские цифры.
-> Переводишь число из римских в арабские, преобразуешь обратно имя пользователя по алгоритму.
-> Профит.
Вариант второй — банальный перебор.
Перебором входных данных подбираем комбинацию и узнаем пользователя. Срок истечения также перебирается скриптом, например: for i in $(seq 1 6000); do ./prog user $i | grep -B 5 -A 5 «qqq....»; done.
Что касается новой недели: админка чата опять переходит Владимиру Черепанову! На этот раз вас ожидает (думаете, PWN? МУАХАХА!) таск на криптографию — придётся повозиться с одноразовыми блокнотами. Стоимость — 200 PTS.
Очередные вводные:
Начало: 24 июня в 18:00
Дедлайн: 28 июня
Чат: https://t.me/letoctfbot2019
Формат флага: LetoCTF{text}, который может содержать в себе строчные и заглавные буквы, цифры и любые символы