Главная страница
Навигация по странице:

  • Рис. 6.6. Ввод скрипта, осуществляющего расшифровку программы

  • 6.3. Редактор кода

  • Рис. 6.7. Режимы исследования программы в HIEW

  • Лабораторные работы

  • Лабораторная работа № 2

  • Лабораторная работа № 3

  • Лабораторная работа № 4

  • Лекции. Введение. Защита программного обеспечения от несанкционированного использования с помощью программноаппаратных средств


    Скачать 4.72 Mb.
    НазваниеВведение. Защита программного обеспечения от несанкционированного использования с помощью программноаппаратных средств
    АнкорЛекции
    Дата19.11.2022
    Размер4.72 Mb.
    Формат файлаdoc
    Имя файлаLektsii_PASOIB.doc
    ТипДокументы
    #797594
    страница12 из 12
    1   ...   4   5   6   7   8   9   10   11   12

    Рис. 6.5. Просмотр базового адреса сегмента
    Для написания скрипта, осуществляющего расшифровку программы, вызовем консоль Shift+F2. В нем вводим следующий текст (рис. 6.6).

    auto a;

    auto temp;

    for (a=0x116;a<0x116+0x100;a++)

    {

    temp=Byte(MK_FP(0x1000,a));

    temp=temp ^ 0x66h;

    PatchByte(MK_FP(0x1000,a),temp);

    }



    Рис. 6.6. Ввод скрипта, осуществляющего расшифровку программы
    После расшифровки, перейдем на адрес 122h, укажем на то, что с этого адреса начинается текстовая строка (клавиша “A”), после чего расшифрованный фрагмент примет следующий вид:

    seg000:0116

    mov ah,9;




    seg000:0119

    or al,1;




    seg000:011B

    int 21h;

    Печать строки DOS

    seg000:011D

    xor ax,ax;

    Обнуление регистра ax

    seg000:011F

    int 16h

    Задержка вплоть до нажатия произвольного символа клавиатуры

    seg000:0121

    Retn




    seg000:0122

    db ‘Hello, IDA PRO! $’




    Видим, что IDA PRO обладает многими полезными функциями, позволяющими значительно облегчить дизассемблирование программ. IDA PRO является очень мощным средством как для разработчиков ПО, так и для взломщиков.
    6.3. Редактор кода HIEW
    HIEW – необыкновенно мощный инструмент, предназначенный для анализа и редактирования программ непосредственно в исполняемом коде. Большим достоинством данного продукта является то, что он совмещает в себе редактор кода и дизассемблер, что позволяет его очень эффективно использовать для анализа больших программ, занимающих по объему несколько мегабайт, его использование позволяет человеку, осуществляющему исследование ПО, зачастую, полностью отказаться от отладчиков и дизассемблеров.

    Дизассемблер, встроенный в HIEW является интерактивным. Его мощь может быть сравнима только с IDA.

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

    Если IDA можно сравнить с тяжелым стратегическим оружием типа артиллерии, то работа с HIEW больше напоминает работу разведчика.

    Наиболее употребительный формат запуска HIEW следующий – HIEW.EXE имя-файла, после чего HIEW перейдет в режим просмотра – редактирования данного файла. Возможно три вида режимов исследования – текстовый, шестнадцатиричный, а также в виде мнемоник ассемблера (рис. 6.7.)



    Рис. 6.7. Режимы исследования программы в HIEW
    Первоначально исследователь находится в режиме просмотра программы. Для того, чтобы перейти в режим ее редактирования, необходимо воспользоваться функциональной клавишей F3 (EDIT). В данном режиме пользователь может исправить шестнадцатиричный код (в том числе, воспользоваться распространенной операцией xor), ввести инструкцию на языке ассемблера, ввести код для шифровки/дешифровки фрагмента и т.д. Запись исправлений осуществляется по команде UPDATE (F9).

    По клавише F8 (HEADER) можно просмотреть заголовок исследуемого файла.

    Команда REFER (F6) позволяет найти в коде программы ссылки на некоторый адрес, команда GOTO (F5) позволяет перейти непосредственно к указанному адресу.

    Большим достоинством HIEW является наличие в нем так называемой крипт-системы. Она позволяет расшифровывать программу «на лету», не отрываясь от анализа.
    Лабораторные работы
    Лабораторная работа №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:

    И.В. Аникин, В.И. Глова. МЕТОДЫ И СРЕДСТВА ЗАЩИТЫ КОМПЬЮТЕРНОЙ ИНФОРМАЦИИ. Учебное пособие
    1   ...   4   5   6   7   8   9   10   11   12


    написать администратору сайта