0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<p>Теги: реверс-инжиниринг, reverse engineering, задачи, реверс, ctf, обратная разработка</p>
1
<p>Теги: реверс-инжиниринг, reverse engineering, задачи, реверс, ctf, обратная разработка</p>
2
<p>Всем привет! Как известно, в CTF существует несколько вариантов проведения соревнований. В нашем случае мы остановимся на реверс-инжиниринге - исследовании программ без исходного кода. И поговорим про задание<strong>Reverse_50. Console version 1.337</strong>.</p>
2
<p>Всем привет! Как известно, в CTF существует несколько вариантов проведения соревнований. В нашем случае мы остановимся на реверс-инжиниринге - исследовании программ без исходного кода. И поговорим про задание<strong>Reverse_50. Console version 1.337</strong>.</p>
3
<h2>Into</h2>
3
<h2>Into</h2>
4
<p><strong>Обратная разработка</strong>- исследование некоторого устройства или программы, а также документации на него с целью понять принцип его работы; например, чтобы обнаружить недокументированные возможности (в том числе "программные закладки"), сделать изменение, или воспроизвести устройство, программу или иной объект с аналогичными функциями, но без копирования как такового (© Wikipedia).</p>
4
<p><strong>Обратная разработка</strong>- исследование некоторого устройства или программы, а также документации на него с целью понять принцип его работы; например, чтобы обнаружить недокументированные возможности (в том числе "программные закладки"), сделать изменение, или воспроизвести устройство, программу или иной объект с аналогичными функциями, но без копирования как такового (© Wikipedia).</p>
5
<p>Эта группа категорий схожа по своей сути. Различия небольшие:<strong>reverse</strong>- обычно "раскрутка" алгоритмов, использованных в программе для получения флага;<strong>pwn</strong>- взлом программ и устройств теми же методами;<strong>binary</strong>- реверс программ под Linux;<strong>exploit, vuln</strong>- поиск и эксплуатация уязвимостей на удалённых сервисах (иногда имея в наличии исходный код, иногда сам сервис, иногда без него).</p>
5
<p>Эта группа категорий схожа по своей сути. Различия небольшие:<strong>reverse</strong>- обычно "раскрутка" алгоритмов, использованных в программе для получения флага;<strong>pwn</strong>- взлом программ и устройств теми же методами;<strong>binary</strong>- реверс программ под Linux;<strong>exploit, vuln</strong>- поиск и эксплуатация уязвимостей на удалённых сервисах (иногда имея в наличии исходный код, иногда сам сервис, иногда без него).</p>
6
<h2>Reverse_50. Console version 1.337</h2>
6
<h2>Reverse_50. Console version 1.337</h2>
7
<p><em>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.</em></p>
7
<p><em>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.</em></p>
8
<h3>Решение</h3>
8
<h3>Решение</h3>
9
<p>В этом задании нам нужно было попасть в систему консоли. Для начала запускаем файл на исполнение и видим окно с приветствием и предложением ввести пароль:</p>
9
<p>В этом задании нам нужно было попасть в систему консоли. Для начала запускаем файл на исполнение и видим окно с приветствием и предложением ввести пароль:</p>
10
<p>Что же делать? Открываем файл в отладчике OllyDbg и находим строчку "Please enter password:" - в основном окне пролистаем листинг вверх, до адреса 004010F9:</p>
10
<p>Что же делать? Открываем файл в отладчике OllyDbg и находим строчку "Please enter password:" - в основном окне пролистаем листинг вверх, до адреса 004010F9:</p>
11
<p>Как вы можете видеть, проверка введённого пароля осуществляется в функции, расположенной по адресу 00401000. Попробуем поставить на этот адрес брейкпоинт (клавиша F2 в OllyDbg), затем нажмём F9 (продолжить исполнение) и для примера введём какую-нибудь строку в окне программы:</p>
11
<p>Как вы можете видеть, проверка введённого пароля осуществляется в функции, расположенной по адресу 00401000. Попробуем поставить на этот адрес брейкпоинт (клавиша F2 в OllyDbg), затем нажмём F9 (продолжить исполнение) и для примера введём какую-нибудь строку в окне программы:</p>
12
<p>Нажимаем "Enter", и происходит срабатывание брейкпоинта. Далее переходим в OllyDbg и нажимаем клавишу F7, чтобы перейти внутрь функции по адресу 00401000:</p>
12
<p>Нажимаем "Enter", и происходит срабатывание брейкпоинта. Далее переходим в OllyDbg и нажимаем клавишу F7, чтобы перейти внутрь функции по адресу 00401000:</p>
13
<p>Сразу можно заметить, что по адресу 004010CF производится вызов функции strcmp() из стандартной библиотеки C. Эта функция сравнивает две строки и возвращает 0, если эти строки одинаковы. Ставим брейкпоинт на вызов функции (клавиша F2), нажимаем F9 (продолжить исполнение) и смотрим, какая еще строка, кроме введённой нами строки "password123", будет в неё передаваться:</p>
13
<p>Сразу можно заметить, что по адресу 004010CF производится вызов функции strcmp() из стандартной библиотеки C. Эта функция сравнивает две строки и возвращает 0, если эти строки одинаковы. Ставим брейкпоинт на вызов функции (клавиша F2), нажимаем F9 (продолжить исполнение) и смотрим, какая еще строка, кроме введённой нами строки "password123", будет в неё передаваться:</p>
14
<p>В окне стека (и в окне регистров) мы видим, что строка s1 равна "ctfzone{l33t_haxx0r_is_you!!1}" (без кавычек).</p>
14
<p>В окне стека (и в окне регистров) мы видим, что строка s1 равна "ctfzone{l33t_haxx0r_is_you!!1}" (без кавычек).</p>
15
<p><strong>Вот и флаг!</strong></p>
15
<p><strong>Вот и флаг!</strong></p>
16
<p>Ответ:<em>ctfzone{l33t_haxx0r_is_you!!1}</em></p>
16
<p>Ответ:<em>ctfzone{l33t_haxx0r_is_you!!1}</em></p>
17
<p>В следующих заметках мы продолжим рассматривать задания из CTF по реверсу, поэтому следите за новостями!</p>
17
<p>В следующих заметках мы продолжим рассматривать задания из CTF по реверсу, поэтому следите за новостями!</p>
18
<p><em>За подготовку материала<a>автор</a>выражает благодарность CTF-сообществу.</em></p>
18
<p><em>За подготовку материала<a>автор</a>выражает благодарность CTF-сообществу.</em></p>
19
19