Тестирование качества защиты программного продукта

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    868,38 Кб
  • Опубликовано:
    2016-05-22
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Тестирование качества защиты программного продукта















Тестирование качества защиты программного продукта

.       
Постановка задачи на курсовую работу

программа защита алгоритм

На примере любой свободно распространяемой программы (shareware), обладающей защитой от своего несанкционированного использования (требует регистрации путем введения корректного имени и пароля), исследовать качество и механизм функционирования данной защиты.

При этом решить следующие задачи:

1.  Выделить в коде исследуемой программы модуль, ответственный за регистрацию пользователя. Выделить участок данного кода, выполняющий функцию принятия решения о корректности введенного пароля.

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

.        Выделить в коде программы модуль, ответственный за формирование корректного пароля, соответствующего введенному имени пользователя (если такой модуль есть), либо описать существующий механизм определения пароля. Исследовать данный модуль и формально записать алгоритм формирования корректного пароля (представить блок-схему алгоритма).

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

.        Представить блок-схему алгоритма защиты ПО от несанкционированного исследования.

Для решения данных задач рекомендуется использовать следующие средства динамического и статического исследования ПО:

. Отладчик SoftIce или OllyDbg.

. Редактор кода HIEW.

. Интерактивный дизассемблер IDA Pro.

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

.       
Внешнее предварительное исследование программного продукта

Для исследования технологии парольной защиты ПО была выбрана свободно распространяемая (shareware) программа AD Sound Recorder версии 4.5.1 компании Adrosoft Software, предназначенная для записи аудио файлов.

AD Sound Recorder поддерживает пять видов зуковых файлов - WAV, MP3, WMA, OGG, FLAC. С AD Sound Recorder можно записать звук с микрофона, потоков аудио из Интернета, или музыку, которая проигрывается Winamp, Windows Media Player, Quick Time, Real Player, Flash, games, и т.д. не теряя качества. AD Sound Recorder предоставляет зрительные образы входящего звука. Вы можете настроить громкость записи, приостанавливать или возобновлять запись по своему желанию. Информация о файле: Вы может просмотреть такую информацию записываемого файла, как размер файла, длительность, и так далее; также встроен редактор тэгов Id3 информацию. Данная программа содержится в файле adsrecorder.exe размером 1435 КБ.

После установки и запуска программы появилось окно (Рис. 1):

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

В описании программы сказано, что в бесплатной версии этой программы функциональность программы ограничена. Некоторые функции программы не могут быть запущены в незарегистрированной версии программы. Для получения информации о том, как купить программу, необходимо щелкнуть по кнопке «Purchase», после чего осуществляется переход на сайт оформления заказа. На сайте указана стоимость данного ПО - $24.95. При вызове информации о программе AD Sound Recorder через меню «About» выдается следующая информация (Рис. 2):

 

Рис. 2. Информация о продукте

Процедура регистрации производится нажатием кнопки «Register». Процедура регистрации выглядит следующим образом (Рис. 3):

Рис. 3. Процедура регистрации

Здесь необходимо ввести ключ.

Вводим в первый блок комбинацию цифр «1234», во второй - «1122334455» (Рис. 4):

Рис. 4. Ввод данных в окно регистрации

Программа сообщает о том, что введенный пароль неверный (Рис. 5):

Рис. 5. Сообщение о неверном пароле

Попытки использования других паролей также приводили к ошибочному результату.

.       
Предварительный анализ кода программы. Блок-схема алгоритма работы защитного механизма

.1 Точки останова

Для анализа кода программы, а также для установки точек останова будем использовать программу IDA Pro. Поэтому, открываем с помощью нее программу AD Sound Recorder - исполняемый файл adsrecorder.exe. Для обнаружения участка кода, отвечающего за регистрацию программы, выполним поиск по коду с ключевыми словами вывода сообщения о вводе неправильного пароля - «Incorrect Code!» и ставим точку останова на найденной строке.

После этого вызываем окно регистрации программы и вводим следующие значения: в первый блок - 1234 и во второй - 1122334455.

Сразу же после нажатия кнопки «Register» произошел перехват управления IDA Pro. Была перехвачена строка по адресу 0049C7B4, присваивающая регистру eax значения адреса строки "Incorrect Code!":

CODE:0049C7B4mov eax, offset aIncorrectCode ; "Incorrect Code!"


3.2 Поиск введенных данных

Остановка произошла на команде записи в регистр eax адреса строки «Incorrect Code!»:

Если посмотрим на строку выше, то увидим, что там находится команда побайтового сравнения, а затем условного перехода на адрес 49C7C0:


Посмотрим чему равен первый байт по адресу eax, для этого в окне памяти переходим по адресу, указанному в регистре, - 4FEF84.

Видим там следующие байты:


То есть переход по адресу 49C7C0 не будет осуществлен, так как первый байт равен нулю.

Посмотрим какая команда находится по адресу 49C7C0:


Данная команда осуществляет запись в регистр eax адреса строки, сообщающей об успешной регистрации продукта, следовательно для осуществления взлома программы отладчик должен пройти данный блок кода. Для того чтобы осуществить необходимый переход поднимемся по коду выше и посмотрим, как программа пришла к сравнению по адресу 49C7B2.

Здесь отладчик показывает, что программа оказывается здесь после выполнения команды по адресу 49C6A8+5E, или 49C706. Поставим туда точку останова и выполним отладку.


Чуть выше находится вызов процедуры, установим на неё точку останова. Перед входом в эту процедуру смотрим какие регистры передаются в неё и находим:


То есть в eax находится первая часть пароля, введённая нами, а в регистре edx другие, неизвестные нам 4 цифры. Таким образом первая часть пароля записывается по адресу 023CE270.

На одну команду ниже находится условный переход к адресу 49C79E, по этому адресу находятся команды:


Здесь к регистру edi прибавляется 5. Посмотрим, что лежит в этом регистре:


Одна из комбинаций цифр совпадает с той, что передавалась в процедуру по адресу 49C701, вместе с нашей комбинаций цифр, следовательно, можно сделать предположение, что по адресу edi находятся верные пароли, с которыми сравнивается введённая нами комбинация.

Осуществим модификацию флага нуля ZF при отладке команды по адресу 49C706 jnz loc_49C79E.

Условный переход не был осуществлен и программа пошла дальше:


Продолжим пошаговую отладку (F8) программы до следующих команд:




По адресу 022E79E0 находится введённый пароль:


Продолжим отладку до команды:


Проверяем какие параметры передаются в процедуру, то есть смотрим, что находится в регистрах eax и edx:


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

3.3    Работа защитного механизма

Модуль защиты программы AD Sound Recorder 4.5.1. начинается с команды push ebp по адресу 0049C6A. Выше видно объявление переменных размером двойное слово или 2 байта:


Эти переменные будут использоваться в дальнейшем для сдвига относительно указанного адреса.

Перед входом в цикл, на который указывает отладчик, стоят следующие команды:


Здесь число 32h показывает количество итераций цикла. Далее перейдем окне памяти по адресу, вносимому в регистр edi:

Рис. 6. Область памяти, в которой находится первые 4 цифры правильного пароля.

Далее зайдем в процедуру по адресу 0049C701 call sub_404A1C, в которую передаются 2 параметра, первый - введённая нами первая часть пароля, второй - первые 4 цифры из указанного выше набора.

Внутри процедуры видим следующее сравнение:


В случае равенства регистров eax и edx осуществляется переход по адресу 404ABA, но в eax находится введенная нами первая часть пароля, а в edx - взятые из памяти 4 цифры. Посмотрим команды по адресу 404ABA:


То есть в случае удачного сравнения флаг нуля устанавливается в 1 и происходит выход из процедуры. После вызова процедуры следует команда условного перехода:


А при равенстве флага нуля 1, перехода не произойдет и программа пойдет дальше по коду. Следующие за этим команды mov esi,32h и mov ebx, offset unk_4A8D40 похожи на уже встречавшиеся команды:


Следовательно число 32 также означает количество итераций цикла, а посмотрев участок памяти 4A8D40 видим:

Рис. 7. Область памяти, в которой находятся последние 10 цифр правильного пароля.

Отладим программу дальше до процедуры:


В которую, как и в предыдущем случае передаются значения в регистров eax и edx, соответствующие второй части введённого нами пароля и взятой из памяти комбинации.


Зайдя в процедуру, находим следующее сравнение и условный переход:


Таким образом переход был осуществлён в ту же процедуру, что и в предыдущий раз. В случае равенства регистров флаг нуля устанавливается в 1 и переход по адресу 49C794 не осуществляется, а выполняются команды:


Вспомнив команды перед найденной строкой о неправильном вводе пароля:


Находим сравнение байта по адресу eax с единицей. Таким образом программа будет взломана при невыполнении переходов по адресам 49C706 и 49C73E.

.       
Реализация «мягкого» взлома программы

4.1    Поиск модуля, ответственного за генерацию корректного пароля

Следующим направлением анализа механизма парольной защиты исследуемой программы стал поиск алгоритма генерации корректного пароля. При внимательном изучении защитных механизмов в предыдущем пункте были найдены два ключевых условных перехода:


Разберем участок кода, на который осуществляется первый условный переход:


К регистру edi прибавляется значение 5, поскольку в регистре edi находятся первые 4 цифры пароля, осуществляется сдвиг по памяти на 5 байт, и в регистре появляется новое значение. Дальше значение по адресу [ebp+var_8] уменьшается на один, и осуществляется условный переход в случае неравенства этого значения нулю. Ранее в указанный участок памяти заносилось число 32h. Таким образом правильных первых и вторых половин пароля 50 штук. В случае несовпадения введённых четырехзначного числа с цифрами, считываемыми в памяти программы, программа так и не переходит к сравнению оставшихся 10 цифр, поэтому возьмем имеющиеся в памяти любые 4 числа по указанному выше адресу, и повторим отладку программы.

Введём в первый блок цифры 1297, во второй 1122334455:

Рис. 8. Окно регистрации.

Ставим точку останова на второй ключевой переход:


Переходим к изучению кода по адресу 49С794:


Регистр ebx, указывающему на адрес памяти, в котором находится второй блок кода увеличивается на 11, esi, являющийся счетчиком цикла уменьшается на один, и в случае, если он не равен нулю, осуществляется переход по адресу 49C716. Таким образом, в регистре ebx появляется новое значение корректного пароля, и сравнение осуществляется 50 раз или до тех пор, пока не совпадет с введённым значением. Возьмем имеющееся на данный момент значение по адресу ebx: 1275215397. При повторной попытке регистрации введём следующее значение пароля:

Рис. 9. Окно регистрации с правильным паролем.

Нажимая кнопку «Register» смотрим реакцию программы:

Рис. 10. Сообщение об успешной регистрации.

4.2    Список корректных паролей

При проверке пароль делится на две части - это первые 4 цифры и последние 10. Пароли размещены в участке памяти 4A8C44 - 4A8F65, разделены между собой точками. Любой первый корректный блок пароля сочетаются с любым вторым корректным блоком.

Список корректных паролей:

Первый блок:

; 1397; 1461; 1556; 1612; 2407; 2434; 2503; 2976; 3156; 3347; 3487; 3601; 3930; 4105; 4118; 4356; 4363; 4401; 4543; 4558; 4852; 4982; 4993; 5186; 5377; 5654; 5691; 5797; 5897; 5971; 6130; 6317; 6323; 6381; 6556; 6697; 6750; 7383; 7609; 7715; 7846; 7929; 8160; 8867; 8985; 9287; 9377; 9740; 9982.

Второй блок:

; 1275215397; 1566343884; 2565740578; 2662106601; 2691296134; 2891286439; 2976152334; 3129671956; 3215798652; 3310760636; 3408623238; 3613335510; 3613792109; 3682429757; 4137188610; 4342271231; 4576195302; 4794974223; 4866392884; 5488323045; 5576649531; 5705914986; 5742793638; 5843296280; 5916854666; 5928777782; 6239733951; 6354493062; 6447348785; 6470649685; 6843086169; 7137982050; 7408689513; 7590100831; 7712302712; 7803659454; 7838394308; 7873203406; 8100684409; 8552081097; 8575123438; 8692973288; 8728706126; 9211123348; 9374109406; 9507362991; 9633769196; 9755066544; 9932579398

5.     
Реализация «жесткого» взлома программы

Следующей целью исследования был поиск мест сверки введенного пароля со сгенерированным программой.



Войдем в данную процедуру и увидим следующий код:


В случае равенства eax и edx осуществляется переход по адресу 404ABA:


Как видно, в процедуре CALL sub_00404A1C происходит сравнение регистров eax и edx. Если они равны, то флаг нуля устанавливается в единицу, прыгает в конец процедуры, и программа выходит из процедуры, ZF=1 позволяет не условный осуществлять переход находящийся после процедур. В случае если сравниваемые регистры не будут равны после 50 итераций цикла, программа не перейдет на участок кода, с сообщением об успешной регистрации: " Thank you for using our product!".

Значит, необходимо сделать условный переход по адресу 404A25 на безусловный, либо сменить условие на противоположное. Для изменения байта программы откроем шестнадцатеричный редактор кода и изменим значение по адресу 404A26 с 84 на 85.


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

6.     
Блок-схема алгоритма модуля защиты


7.     
Рекомендации по улучшению механизма защиты

В качестве возможных мер по повышению уровня защиты данного программного продукта можно посоветовать следующие:

В первую очередь, защитить от дизассемблирования и отладки код программы, например, динамическим шифрованием кода программы или же внедрением механизмов поиска и идентификации средств отладки;

Осуществить привязку регистрационного кода к имени, к некоторым аппаратным особенностям компьютера пользователя, чтобы каждой конкретной ЭВМ даже при одинаковых именах соответствовал свой регистрационный код с максимально малой вероятностью его совпадения его с другими.

Заключение

Подводя итог, можно сказать, что защита данной программы очень слаба в плане защиты ПО от несанкционированного использования. При этом не используются никакие механизмы защиты от дизассемблирования и отладки.

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

Также был осуществлен и мягкий взлом. Мне удалось найти список корректных паролей внутри программы.

Список использованной литературы

1.      Мельников В.П. Информационная безопасность и защита информации : учеб. пособие для студ. вузов / В. П. Мельников, С. А. Клейменов, А. М. Петраков ; под ред. С. А. Клейменова. - 4-е изд., стер. - М. : Академия, 2009. - 336 с. (50 экз)

2.      Хореев П.Б.. Программно-аппаратная защита информации : учеб. пособие / П. Б. Хорев. М. : Форум, 2009 - 352 с. (5 экз).

3.      Проскурин В.Г.. Программно-аппаратные средства обеспечения информационной безопасности. Защита в операционных системах : учеб. пособие для вузов / В.Г. Проскурин. М. : Радио и связь, 2000. - 168 с.

Похожие работы на - Тестирование качества защиты программного продукта

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!