Разбор задач из CTF по реверсу: Console version 1.337
Всем привет! Как известно, в CTF существует несколько вариантов проведения соревнований. В нашем случае мы остановимся на реверс-инжиниринге — исследовании программ без исходного кода. И поговорим про задание Reverse_50. Console version 1.337.
Into
Обратная разработка — исследование некоторого устройства или программы, а также документации на него с целью понять принцип его работы; например, чтобы обнаружить недокументированные возможности (в том числе «программные закладки»), сделать изменение, или воспроизвести устройство, программу или иной объект с аналогичными функциями, но без копирования как такового (© Wikipedia).
Эта группа категорий схожа по своей сути. Различия небольшие: reverse — обычно «раскрутка» алгоритмов, использованных в программе для получения флага; pwn — взлом программ и устройств теми же методами; binary — реверс программ под Linux; exploit, vuln — поиск и эксплуатация уязвимостей на удалённых сервисах (иногда имея в наличии исходный код, иногда сам сервис, иногда без него).
Reverse_50. Console version 1.337
A.U.R.O.R.A.: Lieutenant, you are standing in the Alpha base in front of the SCI430422 mainframe art console where its sixty-four LED lights are blinking in hypnotic patterns. As you know, this system is renowned for its top-notch security measures. Only the most expert or resourceful hackers are able to break in — and you are definitely one of them.
Решение
В этом задании нам нужно было попасть в систему консоли. Для начала запускаем файл на исполнение и видим окно с приветствием и предложением ввести пароль:
Что же делать? Открываем файл в отладчике OllyDbg и находим строчку «Please enter password:» — в основном окне пролистаем листинг вверх, до адреса 004010F9:
Как вы можете видеть, проверка введённого пароля осуществляется в функции, расположенной по адресу 00401000. Попробуем поставить на этот адрес брейкпоинт (клавиша F2 в OllyDbg), затем нажмём F9 (продолжить исполнение) и для примера введём какую-нибудь строку в окне программы:
Нажимаем «Enter», и происходит срабатывание брейкпоинта. Далее переходим в OllyDbg и нажимаем клавишу F7, чтобы перейти внутрь функции по адресу 00401000:
Сразу можно заметить, что по адресу 004010CF производится вызов функции
В окне стека (и в окне регистров) мы видим, что строка s1 равна «ctfzone{l33t_haxx0r_is_you!!1}» (без кавычек).
Вот и флаг!
Ответ: ctfzone{l33t_haxx0r_is_you!!1}
В следующих заметках мы продолжим рассматривать задания из CTF по реверсу, поэтому следите за новостями!
За подготовку материала автор выражает благодарность CTF-сообществу.