Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ЛР №9 - OllyDebugger / ЛР №9 (пример1)

.docx
Скачиваний:
28
Добавлен:
10.02.2015
Размер:
17.18 Кб
Скачать

В данной лабораторной работе исследуеся программа-отладчик OllyDbg.

1.

Первой программой, которая используется для исследования функций OllyDbg, является программа TestP (скриншот 1). Данная программа требует ввести ключ активации и проверяет его на правильность.

На скриншоте 2 показано, как выглядит эта программа в отладчике OllyDbg.

Первым делом нужно найти функцию, которая отвечает за открытие окна программы. На скриншоте 3 видно, что она располагается по адресу 00453E4F. Далее, заходим в эту функцию (скриншот 4). Внутри этой функции находим функцию, отвечающую за открытие окна (скриншот 5), заходим в неё (скриншот 6). Повторяем это действие ещё раз (скриншоты 7 и 8). На скриншоте 9 показано точное место в программе, где заканчивается отрисовка окна.

Далее, в программе специально вводится неправильный ключ. Теперь нужно найти функцию, которая отрисовывает окно с сообщением о неправильно введённом ключе. Для этого продолжаем трассировку программы с места, показанного на скриншоте 9. Найденная функция показана на скриншоте 10. Проанализируем код, расположенный перед вызовом данной функции. На скриншоте 11 видно, что в регистр EAX заносится введённый пользователем пароль (в моём случае – «123»), а в регистр EDX – слово «hello», которое, скорее всего, и является правильным паролем. Далее вызывается функция сравнивания этих значений (расположена по адресу 00453B18). По адресу 00453B1D расположен оператор условного перехода, работающий в зависимости от результата вышеописанной функции. Видно, что при неправильно введённом пароле переход на адрес, указанный в качестве параметра этого оператора, не происходит. Значит, переход на этот адрес происходит при правильно введённом пароле. Следовательно, всё, что нужно сделать – заменить оператор условного перехода на оператор безусловного перехода (скриншот 12) и сохранить изменённую программу.

Таким образом, мы получили программу, которая выводит окно об успешной регистрации (скриншот 13) при любом введённом ключе.

2.

Второй исследуемой программой является WinZip 7.0.

На скриншоте 14 показано окно запроса регистрации программы.

Для начала нужно установить точки останова на вызовы функций MessageBox и DialogBox. Далее были введены имя и пароль (в моём случае «name» и «pass»). На скриншоте 15 показана функция по адресу 00426910, отвечающая за вывод окна о неправильном вводе имени и пароля. Видно, что выполнение программы прервалось на выполнении функции MessageBoxIndirectA. При этом содержимое регистра ESI равно 0.

К моменту выполнения команды RETN по адресу 00426940 значения регистров EBX и ESI равны 0047D928 и 0047D958 соответственно (скриншот 16). В памяти по этим адресам хранятся введённые имя и пароль без первых букв: «ame» и «ass».

Далее устанавливаются точки прерывания на все вызовы функций GetDlgItemTextA (скриншот 17). Пытаемся заново ввести имя и пароль. При нажатии клавиши “ОК” происходит вызов функции GetDlgItemTextA по адресу 00408014 (скриншот 18). В неё передаётся хэндл окна (003801B4), ControlID=C80, буфер хранения текста (0047D928) и максимальнаое количество возвращаемых символов (29h). Видно, что в регистр EBX заносится адрес хранения имени пользователя. При выходе из процедуры чтения информации по этому адресу размещается введённое мною имя пользователя – «name».

На скриншоте 19 видно, что по адресу 00408036 расположена аналогичная функция, считывающая пользовательский пароль. Введённый пароль записывается в регистр ESI (скриншот 20).

Команды по адресам 00408049 и 00408053 сравнивают введённые имя и пароль со значением «0». Т.е, если пользователь не ввёл имя или пароль, происходит переход по адресу 004080B2 (скриншот 21), и появляется сообщение «Incomplete or incorrect information».

На скриншоте 22 выделена функция, которая, предположительно, проверяет введённые имя и пароль на правильность, т.к. после её выполнения есть ещё один условный переход по адресу 004080B2. Зайдём в эту функцию (скриншот 23). Функция по адресу 00407B58 опять сравнивает введённое имя с нулём.

В функцию, расположенную по адресу 00407B83, параметром передаётся имя, введенное пользователем.

В функцию, расположенную по адресу 00407C16, передаютс я параметры в регистрах EAX и EDI (одно из значений в стеке и имя, введенное пользователем).

В функцию, расположенную по адресу 00407C2A, параметрами передаются пароль, введённый пользователем, и ASCII-строка «1709026A». Вероятно, это значение строки и является верным паролем (скриншот 24). Пробуем ввести имя пользователя «name» и пароль «1709026A». В результате получаем итог, показанный на скриншоте 25 – программа успешно зарегистрирована.

Соседние файлы в папке ЛР №9 - OllyDebugger