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

Исследование типовой защиты в дизассемблере ida Pro

Откроем исследуемый файл CRACKME1.EXE в интерактивном дизассемблере IDA Pro (см. Приложение 3).

Рис. Дизассемблерный код программы CRACKME1.EXE

Переходим на вкладку Functions и начинаем набирать на клавиатуре название нужной нам функции MessageBoxA.

Рис. Список функций, определенных IDA Pro

Через контекстное меню устанавливаем точку останова на функции.

Рис. Установка точки останова на вызов функции MessageBoxA

В нижней части видим информационное сообщение о добавлении точки останова.

Рис. Вывод информации о добавлении точки останова в информационном окне

Запускаем процесс отладки (F9).

Рис. Запуск процесса отладки из меню

Появляется окно с предупреждением: отладка предполагает запуск программы, поэтому исследование вредоносного ПО может повредить компьютеру. Нажимаем Yes.

Рис. Окно с предупреждением

Сработала точка останова.

Рис. Окно с информацией о сработавшей точке останова

Мы оказались в ntdll.dll. Нажимаем F4, чтобы перейти к следующему шагу выполнения программы с выходом из библиотеки.

Произошло исключение. Нажимаем Yes.

Рис. Окно с информацией об исключении

Появилось окно исследуемой программы, вводим произвольные числа, например, «Приложение 2». Нажимаем OK.

Рис. Окно исследуемой программы

Смотрим содержимое стека. Нажимаем на стрелочку напротив значения регистра EAX.

Рис. Значения регистров

Открывается окно содержимого стека, где мы видим, что один из параметров очень похож на пароль.

Рис. Содержимое стека

Слабым местом в защите программы оказался пароль, который хранился открытым текстом.

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

Запустим программу CRACKME2.EXE.

Рис. Диалоговое окно исследуемой программы

Получим окно сообщения. Запакована (см. Приложение 3) программа или нет? Проверить можно с помощью PEiD.

Рис. Результаты анализа исследуемого файла, выполненного программой PEiD

Программа не запакована и не зашифрована. Воспользуемся отладчиком OllyDbg: http://www.ollydbg.de/odbg110.zip

Рис. Главное окно отладчика OllyDbg

По аналогии, попытаемся найти текстовые строки.

Рис. Меню поиска строки

Отсутствуют текстовые строки с описанием ошибки, т.е. использовалась защита.

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

Упростим исследование. С помощью интерактивного дизассемблера IDA Pro (см. Приложение 3) создадим MAP-файл и загрузим этот файл в OllyDbg. Это позволит улучшить читаемость имен функций, меток, комментариев.

Рис. Сохранение в IDA Pro MAP-файла

Сохраним MAP файл в той же папке, где находится исследуемый файл.

Рис. Окно параметров MAP-файла

IDA Pro можно закрывать.

Воспользуемся плагином GoDup: http://www.openrce.org/downloads/details/103/GoDup

Установим плагин и перезапустим OllyDbg. Загрузим MAP-файл.

Рис. Плагин загрузки MAP-файлов в OllyDbg

Рис. Окно с результатами загрузки MAP-файла

Функции преобразились, читать их стало приятнее.

Рис. Дизассемблерный код после загрузки MAP-файла

Теперь надо сказать отладчику, чтобы он остановился в момент ввода пароля или его проверки. Установим точки останова на нужную функцию. Как ее найти? Программа написана на Borland C++ 1999, поэтому можно использовать все функции из этого компилятора. Попробуем поставить точку останова на функцию MessageBoxA (вывод окна).

Воспользуемся еще одним плагином:

http://www.openrce.org/downloads/details/105/CommandBar

После установки увидим командную строку.

Рис. Плагин CommandBar

Для установки точки останова на вызов функции MessageBoxA, в командной строке необходимо ввести команду:

bpx MessageBoxA

Рис. Пример установки точки останова с помощью плагина CommandBar

Запускаем отладку (F9), вводим произвольный пароль в появившееся окно.

Рис. Отладка исследуемой программы

Остановились на вызове функции вывода MessageBoxA.

Рис. Содержимое регистров в процессе отладки программы

В регистре EAX строки текста о неправильном пароле. Пролистаем дизассемблированный текст выше. Видим функцию, похожу на сравнение двух строк.

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

Перезапустим программу и установим точку останова по адресу 00401DC6.

В командной строке можно указать команду:

bp 401DC6

Рис. Установка точки останова с помощью плагина CommandBar

Переходим на список точек останова (B) и проверяем правильность.

Рис. Список установленных точек останова

Запускаем отладчик (F9), вводим пароль и попадаем на точку останова.

Рис. Остановка отладчика на точке останова

Теперь необходимо зайти внутрь функции (F7) и посмотреть, что сравнивает программа. Доходим до функции сравнения.

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

Обратимся к окну регистров. В регистре EAX находится введенная строка, в регистре EDX – строка, с которой сравнивается введенная.

Рис. Содержимое регистров

Проверим в качестве пароля строку «KEYmyOK».

Рис. Окно, подтверждающее правильность введенного пароля

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