Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Взлом ПО.docx
Скачиваний:
115
Добавлен:
23.11.2018
Размер:
3.85 Mб
Скачать

Типовая защита «Запрос пароля» или «Запрос ввода регистрационного номера»

Алгоритм работы:

  1. программа запрашивает пароль у пользователя;

  2. программа что-то делает с паролем (шифрует или получает хеш-функцию);

  3. сравнивает полученную функцию с правильным паролем.

Пример программы.

Рис. Пример кода программы, сравнивающей пароли

Для обхода такой защиты злоумышленнику достаточно найти место сравнения паролей и либо переписать пароль, либо изменить программу так, чтобы любой вводимый пароль считался правильным («бит-хак»).

Запустим программу CRACKME1.EXE и проследим за ее выполнением.

Рис. Главное окно программы

Вводим «Приложение 2», нажимаем OK, получаем сообщение о неверном пароле.

Рис. Окно программы с сообщением о неверном пароле

Далее злоумышленнику необходимо определить:

  1. зашифрована программа или нет;

  2. на каком языке написана программа – эта информация понадобится для определения функций, на которые ставятся точки останова (брейкпоинты).

Воспользуемся утилитой PEiD, http://www.peid.info/ (4 апреля 2011 проект прекратил существование), последняя версия есть на сайте: http://cracklab.ru/download.php?action=list&n=MzU=

Рис. Окно программы PEiD

Откроем исследуемый файл в PEiD.

Рис. Результат анализа исследуемого файла

Видим, что программа написана на С++ фирмы Borland и ничем не запакована. Исследуем программу сначала в отладчике OllyDbg (см. Приложение 2), затем в дизассемблере IDA Pro (см. Приложение 3).

Исследование типовой защиты в отладчике OllyDbg

Воспользуемся отладчиком OllyDbg (см. Приложение 2). Сначала исследуем защиту программы CRACKME1.EXE без применения плагинов, для этого подойдет версия 2.01: http://www.ollydbg.de/odbg201c.zip или более ранняя: http://www.ollydbg.de/odbg110.zip

Рис. Главное окно отладчика OllyDbg после загрузки программы CRACKME1.EXE

OllyDbg остановился на самом начале файла, точнее, на точке входа в программу. Злоумышленник первым делом может попытаться найти строки, которые выводятся программой на экран («password FALSE»). В главном окне кода правой клавишей мыши переходим в контекстное меню.

Рис. Контекстное меню окна дизассемблерного кода

Рис. Строки, которые выводятся в окне программы

Сообщение о неправильном пароле не зашифровано. Можем перейти на код, который обрабатывается в случае неправильного ввода пароля.

Рис. Выбор контекстного меню строк

Рис. Код вывода сообщения о неправильном пароле

Видим вызов стандартной функции MessageBoxA.

Стрелочки, которые находятся левее кода инструкции, показывают направление перехода. Если нажать мышкой на стрелку, то наглядно увидим данный переход.

Рис. Дизассемблерный код вызова функции MessageBoxA

Видим, что переход на сообщение о неверном пароле осуществляется со строки:

00401C58 74 1D JE SHORT 00401C77

Функция JE осуществляет условный переход, т.е. некоторая функция проверяет пароль на правильность и, если он верен, переходит на строку:

00401C5A 6A 00 PUSH 0

Таким образом, функция проверки правильности пароля находится выше строки:

00401C58 74 1D JE SHORT 00401C77

Пролистав код немного вверх, обратим внимание на функцию ассемблера CMP, которая выполняет сравнение, а после – осуществляет переход.

Рис. Дизассемблерный код функции сравнения CMP

Поставим точку останова (клавиша F2) на строке, содержащей CMP, и запустим программу в отладчике (клавиша F9). Вводим любой пароль в появившемся окне программы и нажимаем OK. Мы перешли в отладчик и после этого видим строку, похожую на пароль.

Рис. Окно дизассемблерного кода, содержащего строку пароля

Проверяем полученный пароль.

Рис. Окно с сообщением о вводе правильного пароля