Лабораторные работы
Лабораторная работа №1
Обратное проектирование. Отладка программ с помощью пакета SoftICE.
Цель работы – познакомиться на практике с приемами отладки программ. Научиться работать с отладчиками, функционирующих под системой Windows. Познакомиться с методами взлома защит, требующих ввода ключа.
Программные средства для работы. Система Microsoft Windows 95/98. Взламываемая программа WinZip 7.0. SR-1 (build 1285). Отладчик SoftIce 4.05.
1. Основы работы с SoftIce
SoftIce запускается в любое время при работе системы с помощью комбинации клавиш Ctrl+D. Выход из отладчика осуществляется по функциональной клавише F5.
Отладчик содержит следующие окна:
Окно регистров. Включается по команде wr. Выключается по этой же команде. В данном окне отображается содержимое регистров процессора.
Окно данных (располагается под окном регистров). В данном окне выводится содержимое некоторого участка памяти в шестнадцатеричном и текстовом виде с некоторого адреса. В данном окне можно вывести информацию, содержащуюся начиная с конкретного адреса или с адреса, указанного в некотором регистре. Вывод осуществляется по команде db адрес или db регистр. Окно включается и выключается командой wd.
Окно кода В нем отображается дизассемблированный текст исследуемой программы. Красная строка указывает на команду, которая будет выполнена на следующем шаге. В нижней части окна (на желтой полоске) показано, в каком модуле мы в данный момент находимся. Переключается окно с помощью команды wc.
Самое нижнее окно - окно команд SoftICE.
Пошаговое исполнение программы реализуется с помощью функциональной клавиши F8. По клавише F12 программа выполняется до тех пор, пока не встретит команду RET, после чего выполнение программы прерывается, и управление снова передается отладчику. Клавиша F12 очень полезна при входе в подпрограмму командой CALL. Можно пропустить пошаговое выполнение данной программы с помощью F12 и начать пошаговое исполнение начиная с команды, следующей за командой RET.
SoftIce позволяет пользователю устанавливать точки останова в отлаживаемой программе. При этом, точка останова может быть установлена как по конкретному адресу, так и на вызове некоторой API функции Windows. Точка останова устанавливается по команде bpx адрес или bpx имя API функции. Удаление точек останова реализуется по команде bc. Для удаления всех точек останова используется команда bc *.
Примеры имен WinAPI – функций, необходимых для использования в лабораторной работе:
MessageBoxA, MessageBoxIndirectA – вызов окна сообщений Windows приложениями Win32.
MessageBox, MessageBoxIndirect – вызов окна сообщений Windows приложениями Win16.
GetDlgItemTextA – чтение данных из текстового поля диалогового окна.
GetTickCount – количество тиков со времени запуска Windows.
2. Задание на лабораторную работу
Задание 1. Познакомиться на примере с основными функциями отладчика SoftIce. Ответы на все вопросы оформить в письменном виде. Для получения ответов на вопросы воспользоваться командами отладчика.
Запустить программу WinZip и отказаться от ее регистрации при запуске.
Открыть окно отладки SoftIce и установить точки прерывания на вызов окна сообщений Win32. Какими командами Вы воспользовались?
Запустить окно регистрации WinZip, введя произвольное имя и пароль. В каком модуле прервалось выполнение процедуры регистрации?
Ответить на следующие вопросы.
На какой API – функции прервалось выполнение программы (MessageBoxA или MessageBoxIndirectA)?
Каков адрес памяти, по которому осуществлялся вызов API функции (по этому адресу стоит команда CALL)?
Замечание. Для ответа на данный вопрос, Вам, возможно, необходимо будет покинуть отладчик и заново запустить команду регистрации. Воспользуйтесь командой F12 для прогона подпрограммы API функции и получения адреса памяти ее вызова.
Каково содержимое регистра ESI при выходе из вызванного модуля API – функции?
После возврата в основную программу из API – функции, продолжить ее пошаговое выполнение, и перед командой RET (адрес 0167:0042693F) просмотрите содержимое памяти по адресам, хранящимся в регистрах ESI и EBX. Запишите ее содержимое (первые 10 байт). Сделайте выводы относительно содержимого памяти. Что хранится по данным адресам?
Задание 2. Взлом защиты архиватора WinZip 7.0
При выполнении задания воспользоваться установкой точки прерывания на чтение информации, введенной пользователем в диалоговом окне регистрации (GetDlgItemTextA). Ответы на все вопросы оформлять в письменном виде.
Установить точку прерывания на вызов указанной функции
Запустить процедуру регистрации. В качестве идентификатора пользователя использовать вашу фамилию.
Ответить на следующие вопросы.
По какому адресу вызывается функция GetDlgItemTextA?
Какую информацию читает данная функция?
В какой регистр записывается адрес идентификатора пользователя?
Каково значение данного регистра при выходе из процедуры чтения информации? Вывести на экран содержимое памяти по адресу, хранящемуся в данном регистре.
Найти поблизости в программном коде место вызова аналогичной функции для чтения регистрационного номера. Ответить на следующие вопросы.
Каков адрес вызова данной функции?
В какой регистр записывается адрес введенного регистрационного номера пользователя?
Каково значение данного регистра при выходе из процедуры чтения информации? Вывести на экран содержимое памяти по адресу, хранящемуся в данном регистре.
В пошаговом режиме выполнить чтение идентификатора пользователя и регистрационного номера.
Что по вашему мнению осуществляют команды по адресам 0167:00408049 и 0167:00408053 (с точки зрения WinZip)? Промоделировать на компьютере ситуацию, когда эти условия не выполняются.
Перейти к пошаговому исследованию процедуры по адресу 00407B4B. Что по вашему мнению осуществляет данная процедура? При ответе руководствоваться командами, следующими за данным вызовом. Последующие задания относятся к пошаговому исследованию данной процедуры.
Что осуществляется с точки зрения WinZip командой по адресу 407B58? При ответе на вопрос руководствоваться предварительно запомненной информацией (в том числе относительно адреса 47D928).
Какая информация передается в процедуру, вызываемую по адресу 407B83?
Какая информация и в каких регистрах передается в процедуру, вызываемую по адресу 407C16? Проанализировать код, следующий за вызовом данной процедуры. Что выдается на ее выходе? Сделать вывод о том, что делает данная процедура.
Какая информация передается в процедуру, вызываемую по адресу 407CA2? Сделать вывод о том, что делает данная процедура.
Каков регистрационный код программы. Cделать вывод о том, что делает данная процедура.
Каков регистрационный код программы? Записать его.
Зарегистрировать WinZip.
Предоставить преподавателю пару значений – «Фамилия студента»/ «Регистрационный код».
Лабораторная работа № 2
Вскрытие программной защиты по времени использования. Отлавливание API функций обращения к реестру
Цель – познакомиться с защитой программ по ограничению времени работы на примере STEGANOS II. Научиться отлавливать функции обращения к реестру.
Программное обеспечение – вскрываемая программа Stefanos II, отладчик SoftIce 4.05.
Задание 1
Исследование защиты программы STEGANOS II
Запустить Steganos и войти в окно регистрации. Перед вами – окно ввода рег. номера, который Вам необходимо в дальнейшем вычислить.
Подробно исследовать поверхностно механизм защиты, не входя в отладчик, набрать несколько серийных номеров и следить за выдаваемыми сообщениями. Сделать вывод о том, какую функцию необходимо отлавливать для останова отладчика поблизости от механизма защиты. На какой API – функции необходимо установить прерывание? Сколько различных сообщений выдает программа при вводе неправильного рег. номера?
Когда программа прервется по установленному Вами прерыванию, последовательно выходя из вложенных процедур и исследовав близлежащий код.
Выделить процедуру, осуществляющую ввод рег. номера, его проверку, а при неправильном вводе – и вывод сообщения об ошибке.
Последовательно детализируйте найденную процедуру на две процедуры – вызывающую вызов и проверку рег. номера и осуществляющую выдачу сообщения об ошибке. При поиске руководствоваться тем правилом, что после проверки правильности рег номера должно быть ветвление – отсылка на выдачу сообщения об ошибке при неверном номере и сообщение о правильной регистрации при верном номере. Вполне возможно, при этом поиске Вам придется несколько раз менять флаги в различных местах кода и смотреть, что из этого получится.
Осуществите жесткий взлом программы – после проверки корректности рег. номера заменить значение флага на обратный. Добиться, чтобы программа выдала сообщение “Thank your for registration”.
Выйти из «зарегестрированной» программы и попытаться войти в нее. Что вы видите на экране? Объясните реакцию программы, почему она опять оказалась не зарегестрирована?
И так, нам не удалось обмануть программу «жестким взломом», скорее всего, проверка осуществляется и на многих других этапах, а где – мы сказать не можем. Нам придется все-же разбираться в алгоритме защиты и искать наш рег. номер.
Задание № 2.
Анализ механизма защиты
При выполнении предыдущего задания выделена процедура, осуществляющая проверку пароля на правильность и процедура, где осуществляется ввод пароля. Задание заключается в более детальном исследовании этих процедур и получение информации о рег. номере.
Посмотрите на три процедуры, CALL 014D2A58. Какие параметры передаются туда? Что это за параметры? При ответе иметь в виду, что в процедуру может передаваться через регистр непосредственный параметр, в регистре может быть адрес, где хранится параметр (посмотреть можно, например, через db регистр), а также адрес, по которому хранится адрес, где хранится параметр (просмотр через db регистр, потом смотрим на адрес, который там хранится и набираем db адрес). В данном случае у нас - последняя ситуация. Эти три процедуры выводят на экран текст. Какой текст? Выйти из отладчика и найти то место в программе непосредственно, где находится этот текст. При выполнении подзадания учесть, что адрес искомые адреса в памяти будут хранится в обратном порядке побайтово.
Исследовать процедуру CALL 014С3FE7. Именно после нее осуществляется проверка правильности пароля. Данная процедура содержит вызовы других 2 процедур. Что делает первая процедура? Что делает вторая процедура?
Вторая процедура не получает управления без правильно введенного номера. Заставить принудительно войти в нее. В чем смысл работы второй процедуры?
Вторая процедура относится к регистрации STEGANOS в реестре, и внесения туда различной информации. RegCreateKey – создает для программы ключ в реестре. RegSetValue – вносит ключевые данные. Исследовать, что передается в данные функции (воспользоваться документацией по API). Выйти из отладчика, открыть реестр (regedit) и найти соответствующие записи.
Вычисление регистрационного номера
Пока не обнаружен механизм формирования рег. номера, скорее всего он в той процедуре, где и вводится номер (CALL 014C1D16) или в промежуточной процедуре (до проверке номера).
Исследуйте эти процедуры. Для CALL 0114C1D16 выделите процедуру ввода рег. номера и исследуйте дальнейший код. При пошаговом исполнении дальнейшего номера обратите на содержимое регистра EAX (туда последовательно заносятся 4 значения, а вы также вводите 4). Далее следует вызов некой процедуры и возврат в вызывающую. Скорее всего к оперированию с номером имеет вторая процедура.
Внимательно отслеживайте операции с адресом 01700B40 там находится довольно интересная информация, которая в дальнейшем участвует при проверках номера.
При подозрении на номер, не регистрируйте программу, а сообщите преподавателю.
Лабораторная работа № 3
Мониторы операций
Цель – познакомиться с мониторами событий и методам противодействия мониторам.
Программное обеспечение – монитор файловых операций FileMon.exe, монитор реестра RegMon.exe, системный монитор spy++.
Задание на лабораторную работу
Мониторы файловых операций.
Запустить программу FileMon.exe
Некоторое время поработать в системе и отследить ту информацию, которая протоколируется монитором FileMon.
Ответить на следующие вопросы:
Какого вида информация протоколируется Filemon (по столбцам)?
Выписать все процессы, обращающиеся к файлам.
Какого рода действия протоколируются FileMon? Найти действия вида – чтение, запись, поиск, открытие файла, закрытие файла, чтение атрибута файла, запрещение доступа (LOCK) к файлу, разрешение доступа и другие.
Исследовать дополнительную информацию, которая протоколируется в последнем столбце для каждого действия.
Выделить в протоколе все операции с файлами вида open и close.
Запретить протоколирование операций записи и чтения из файлов.
Среди операций open, запротоколированных в реестре, выделить записи, в которых файл создается, в которых файл открывается только на чтение, на чтение и запись.
Мониторы операций с реестром
Запустить монитор реестра regmon.exe
Поработать в системе и исследовать операции, протоколируемые монитором.
Какого рода параметры протоколируются монитором?
Запустить несколько программ с целью наполнения протокола.
Перечислить все процессы, обращающиеся к реестру.
Перечислить все виды запросов к реестру, которые были запротоколированы.
Выделить в протоколе все запросы вида на создание ключа (CreateKey). Указать идентификаторы формируемых в реестре ключей.
Выделить в протоколе все запросы вида на установление значения в реестре (SetValueEx). Указать значения, которые записываются в реестр и места в реестре, куда записываются значения.
Системный монитор SPY++
Запустить системный монитор SPY++
Вывести на экран все процессы, работающие в системе.
Делализировать процесс SPY++ и вывести на экран все его элементы.
Вывести на экран все окна, ссуществующие в системе.
Для окна Microsoft SPY++ получить всю доступную дополнительную информацию и ответить на вопросы:
Каково значение дескриптора этого окна?
Каковы его координаты и состояние?
Каков дескриптор меню этого окна?
Получить все стили, соответствующие этому окну. Соответствует ли ему стиль WS_MAXIMIZE?
Получить дескриптор иконки этого окна.
Каков дескриптор курсора?
Войти в меню отлова сообщений Windows и изучить все сообщения и группы сообщений, которые позволяет отлавливать SPY++
Сколько сообщений входят в группу Keyboard? Перечислить их.
Настроить по желанию механизм вывода отлавливаемых сообщений и запустить отлов сообщений группы KeyBoard.
Набрать в Word какой либо текст и посмотреть набор отловленных сообщений.
Сколько сообщений Windows соответствует одной нажатой клавише? Какие?
Настроить отлов сообщений так, чтобы нажатию каждой клавиши соответствовало только одно отлавливаемое сообщение (но чтобы можно было видеть его код).
Лабораторная работа № 4
Анализ и редактирование программ с помощью hex- редактора HIEW
Цель – познакомиться с работой в редакторе шестнадцатиричного кода HIEW.
Задание 1.
Запустить программу ACT-1.COM и посмотреть механизм ее работы. Данная программа выполняет следующие действия:
Запрос от пользователя пароля.
Проверку пароля на корректность.
Выдачу сообщения о некорректности пароля при неправильном вводе.
Вам необходимо исследовать и разобраться в механизме проверки пароля.
Подгрузить в HIEW программу ACT-1.COM.
Исследовать код программы как текст. Где приблизительно кончается код программы и начинается область хранимых данных?
Переключиться в режим просмотра шестнадцатиричного кода и установить приблизительный адрес окончания кода и начала области хранимых данных.
Переключиться в режим дизассемблирования, руководствуясь полученной выше информацией и дизассемблированным текстом программы точно указать адрес выхода из программы. С какого адреса программа начинает свою работу и на каком заканчивает? Каков размер области кода?
Подробно объяснить каково назначение группы команд по адресам 00000000 – 00000006. При ответе информации воспользоваться справочником по функциям DOS. Записать сообщение, которое выводит данная команда?
Подробно объяснить, что делает группа команд по адресам 00000007 – 0000000D? Какой длины сообщение можно вводить в качестве пароля?
С какого адреса начинается сообщение о неправильном вводе пароля? Пользуясь данной информацией найти в тексте программы группу команд, которая выводит данное сообщение на экран. По каким адресам располагаются данные команды?
Забить команды условного перехода на неправильный вывод сообщения командами NOP и запустить программу. Объяснить реакцию системы и восстановить исходный текст программы.
Перейти к анализу блока команд, начинающих генерацию пароля – с адреса 0000000E.
Какое значение заносится в регистр bx по адресу 0000001E? С какими двумя блоками информации оперирует блок команд по адресам 19-3B? Что представляет собой первый блок? Что представляет собой второй блок?
В чем назначение блока команд по адресам 3D-49?
Задание 2
Запустить файл Crackme.com и посмотреть суть его работы.
Загрузить в HIEW файл Crackme.com
Какие адреса относятся к коду программы?
Что выполняет процедура по адресу 36?
Что за строка передается процедуре по адресу 3?
Что выполняет группа команд по адресам 6-D?
По какому адресу заносится информация, вводимая от пользователя?
Выделить группу команд, которая выводит информацию о ложно и о правильном пароле.
Внести в текст программы исправления таким образом, чтобы всегда выводилось сообщение о правильной регистрации путем забивки команды условного перехода операторами NOP.
Восстановить текст программы и исследовать механизм проверки пароля.
В чем назначение регистра ECX в процедуре вычисления пароля и какого его начальное значение?
Каким образом модифицируется содержимое регистра ECX в процессе итераций (расписать алгоритм).
Сколько итераций производится над содержимым регистра ECX?
Какое значение должен принять регистр ECX после окончания всех итераций для того, чтобы пароль оказался верным?
Какую роль играет в алгоритме проверки сам пароль собственно?
Подробно описать возможный метод атаки на данный алгоритм проверки (с целью вычисления истинного пароля).
Литература.
Лекции 1-14:
И.В. Аникин, В.И. Глова. ПРОГРАММНО-АППАРАТНАЯ ЗАЩИТА ИНФОРМАЦИИ. Часть 1. Защита программного обеспечения от отладки и дизассемблирования.Учебно-методическое пособие
Лекции 15-20:
И.В. Аникин, В.И. Глова. МЕТОДЫ И СРЕДСТВА ЗАЩИТЫ КОМПЬЮТЕРНОЙ ИНФОРМАЦИИ. Учебное пособие
- Модульная архитектура технических средств защиты по от несанкционированного использования
- Функционирование подсистем и модулей системы защиты по от несанкционированного использования
- Электронные ключи hasp
- Глава 1. Методы и средства обратного проектирования.
- 1.1. Понятие обратного проектирования
- 1.2. Основные приемы, используемые злоумышленником при отладке и дизассемблировании программного обеспечения
- 1.2.1. Специфика атак на модули проверки корректности ключевой информации
- 1.2.2. Специфика атак на модули проверки истечения временного срока работы программы или ограничения по количеству ее запусков
- 1.2.3. Отлов злоумышленником вызова WinApi функций при взломе по
- 1.3. Мониторинг событий
- Глава 2. Методы противодействия обратному проектированию
- 2.1. Методы противодействия отладчикам
- 2.1.1. Защита от отладчиков реального режима
- 2.1.2. Защита от отладчиков защищенного режима
- 2.1.3. Методы, основанные на невозможности полного эмулирования отладчиком среды загрузки программы
- 2.2. Методы противодействия дизассемблированию программного обеспечения
- 2.3. Защита, основанная на человеческом факторе злоумышленника
- Глава 3. Общие методы защиты программ от отладки и дизассемблирования
- 3.1. Использование недокументированных команд и недокументированных возможностей процессора
- 3.2. Шифрование кода программы
- Глава 4. Эмуляторы процессоров. Использование эмуляторов для взлома и защиты программного обеспечения.
- Глава 5. Защита исходных текстов программного обеспечения
- Глава 6. Идентификация и аутентификация субъектов
- 6.1. Идентификация и аутентификация пользователей с использованием технических устройств
- 6.2. Идентификация и аутентификация с использованием индивидуальных биометрических характеристик пользователя
- 7. Защита от разрушающих программных воздействий
- 7.1. Понятие разрушающего программного воздействия
- 7.2 Модели взаимодействия прикладной программы и рпв
- 7.3 Компьютерные вирусы как класс рпв
- 7.4. Защита от рпв. Изолированная программная среда
- Глава 8. Руководящие документы России
- Приложение
- 6.1. Отладка программ в отладчике SoftIce
- 6.2. Дизассемблирование программ с помощью интерактивного дизассемблера Ida Pro
- 6.3. Редактор кода hiew
- Лабораторные работы