Автор: Пользователь скрыл имя, 19 Октября 2011 в 03:02, курсовая работа
Целью данной работы является создание эффективного программного обеспечения для внедрения в исходные тексты программ информации об авторских правах, что позволит исключить несанкционированное их использование.
Введение 4
1 Описание методов и средств решения задачи 6
1.1 Постановка задачи на курсовое проектирование 6
1.2 Общие аспекты проблемы авторского права 6
1.3 Современные методы защиты программного обеспечения 7
2 Методы внедрения водяных знаков 19
2.1 Исследование статистических свойств исполняемого кода 19
2.2 Предлагаемые методы внедрения водяных знаков 21
2.3 Оценка эффективности подстановок 24
3 Описание разработанного программного обеспечения 26
3.1 Общая структура 26
3.2 Проектирование базы данных 26
3.3 Описание основных компонентов 27
3.4 Описание алгоритма программы 30
4 Описание результатов работы 32
4.1 Описание главной формы программы 32
4.2 Описание результатов работы программы и выводы по ним 33
Заключение 35
Список использованных источников 36
Приложение А. Листинг программы 37
Кроме
математических подходов к защите ПО
существует еще множество технических
подходов, усложняющих взломщику задачу.
Так, широко распространенным является
применение защиты от отладки – комплекса
мер, направленных на обнаружение факта
запуска программы «внутри» отладчика,
и аварийное завершение ее работы в случае,
если отладчик будет обнаружен. [3]
Практически
любое ПО (далее для простоты "программа")
состоит из двух основных составляющих
— внутренних данных (расположенных
в сегментах данных) и исполняемого
кода. Природа внутренних данных программы
и их статистические свойства сильно
зависят от функций программы
и реализованных в ней
Измерения
проводились для более чем 20 программных
модулей (.exe, .dll) прикладного и системного
назначения. Исследуемая закономерность
наблюдается и при
Рисунок
7 – Зависимость М(х) от числа команд
в модуле
Рисунок
8 – Зависимость M(x)
от количества команд в модуле при выборках
100, 10 и 1%
Еще
одной статистической характеристикой
исполняемого кода является среднее
расстояние между одинаковыми командами.
Данный параметр характеризуется функцией
S(k), значения которой равняются количеству
совпавших команд в оригинальной программе
P и программе P’, являющейся циклически
сдвинутой на k позиций P. Под совпавшими
командами понимаются стоящие на одной
и той же позиции в P
и P’ одинаковые команды. На рисунке
8 показана полученная экспериментально
зависимость числа совпадений команд
S(k) от величины сдвига k
для значений k в интервале 1–100.
Рисунок
8 – Экспериментальная зависимость
S(k)
В результате проведенных экспериментальных исследований данного показателя обнаружилось, что начиная с некоторого значения k величина S(k) не выходит за пределы фиксиро-ванного интервала.
Значение
рассмотренного параметра может
служить одной из статистических
характеристик программы, которая
не зависит от ее содержания, поскольку,
как показали результаты экспериментов,
начиная с некоторого значения
k (порядка 2000 и выше) значение величины
S(k) не выходит за пределы определенного
интервала, на границы которого оказывают
лишь незначительное влияние реализованные
в программе алгоритмы.
Внедрение
признака авторства
при помощи искажений
частотных свойств
программы. Приведенные выше результаты
экспериментов показывают, что некоторые
статисти-ческие характеристики кода
программы на языке ассемблера в очень
незначительной мере зависят от функциональности
программы. К ним относятся такие характеристики,
как частоты встречаемости различных
команд. Наличие данной особенности в
исполняемом коде открывает возможность
для внесения в него некоторого дополнительного
уникального признака, отли-чающего программу
от множества всех остальных. Данным признаком
может являться откло-нение статистической
характеристики от стандартного или типичного
ее вида. Подобный подход является достаточно
тривиальным и часто используемым решением.
В качестве основы всех нижеприведенных
методов внедрения водяных знаков мы будем
использовать изменения в одной из статистических
характеристик программы. При этом для
построения данных характеристик будут
использованы лишь те параметры, значения
которых являются константными либо меняющимися
в заранее известном диапазоне не только
для программы, в которую требуется поместить
водяной знак, но и для всего множества
программ, к которому она принадлежит.
Преднамеренно внося изменения в статистическую
характеристику программы, мы наделяем
ее код отличительной особенностью, наличие
которой позволит в будущем утверждать,
что она могла быть создана только тем,
кто данную особенность привнес.
Изменение значения среднего номера встреченной команды. Аналогичным образом можно воздействовать не только на частоту встречаемости одной команды, но и нескольких команд, и в этом случае параметром, резкое отклонение в значении которого от стандартного будет говорить о наличии в программе водяного знака, будет средний номер выбранной из программы ассемблерной команды Мх. Для того чтобы программа не только обладала рассматриваемым признаком, но и его наличие нельзя было обнаружить, не располагая некоторыми секретными данными, например, ключом, можно поступить следующим образом. Известно, что значение такого параметра, как Мх, располагается в некотором интервале, границы которого фиксированы, что было подтверждено экспериментально (рисунок 7). Таким образом, изменение величины данного параметра в пределах этого интервала не окажет существенного влияния на частотные характеристики кода. Пусть программа P состоит из N ассемблерных команд. Исходя из результатов проведенных экспериментов, можно сделать предположение о том, что для любой программы для любых случайно выбранных из нее L (L<N) команд величина такого параметра Mx также будет заключена в определенном интервале (см. рисунок 8). Можно подобрать такой вид воздействия теперь уже не на всю программу, а на выбранные из нее L команд, кото-рый приведет к отклонению рассматриваемого параметра далеко за пределы интервала его возможных значений в большую или меньшую сторону, не приводящих, однако, к выходу аналогичного параметра для всей программы за границы экспериментально определенного интервала.
В
качестве воздействия на программу,
приводящего к требуемым
Сдвиг распределения разностей номеров двух последовательно выбранных команд. Рассмотрим еще одно свойство исполняемого кода, которое может быть использовано для внедрения в программу скрытого признака. Если некоторая случайная величина (СВ) x распределена равномерно, то в соответствии с центральной предельной теоремой величина
где xi — равномерно распределенная случайная величина, n — количество суммируемых значений, обладает нормальным распределением. В случае если СВ x распределена равномерно в интервале от –D до D, то математическое ожидание (MO) СВ у будет равным 0.
Если же равномерно распределенная СВ распределена в интервале от 0 до B, то после-довательность значений
,
будет также обладать нормальным распределением с МО M()=0.
В исполняемом коде программы в качестве случайной величины можно рассматривать номер выбранной команды. Для того чтобы данная величина обладала описанным выше свойством, необходимо, что бы распределение ее было близким к равномерному. Однако распределение номеров отдельных инструкций этому условию не удовлетворяет.
Данному
условию удовлетворяет
Рисунок 9 - Распределение частот встречаемости групп содержащих переменное число команд
Кодирование последовательности символов, образующих водяной знак
Пусть S={S1, S2, ..., Sm} - двоичная последовательность, которой представлен водяной знак.
Необходимо разместить последовательность S в теле программы P таким образом, что бы:
а) модифицированная программа P', содержащая S, имела такое же наблюдаемое пове-дение, что и P;
б) последовательность S невозможно было извлечь, не располагая некоторым секрет-ным ключем A0;
в) способ размещения S в Р определяется значением ключа A0 и использует некоторое его свойство, исключающее возможность случайного появления S в теле программы.
Внедрение признака авторства путем внесения изменений в автокорреляционную характеристику. Как уже отмечалось выше, автокорреляционная зависимость программы обладает свойством, заключающимся в том, что процент совпадений в оригинальной P и циклически сдвинутой программе P’ начиная с некоторого значения сдвига становится постоянным, очень несущественно меняющимся от программы к программе. Эксперименты показали, что для всего множества исследованных программ значения параметра S(k) (количество совпадений при сдвиге на k позиций) не выходили за пределы интервала от 12 до 22% для сдвигов на число позиций, равное 100 и более. Отклонения в виде данной автокорреляционной функции от ее стандартного вида могут быть использованы в качестве средства, подтверждающего наличие водяного знака. Например, можно преобразовать программу таким образом, что для некоторых значений величины сдвига k количество совпадающих команд будет существенно ниже либо выше стандартного. Идея использования данной характеристики исполняемого кода может быть применена для внедрения водяного знака.
Полученная
в результате программа P’’
содержит отличающий ее от всего множества
других программ признак, являющийся водяным
знаком.
В случае с графическими изображениями при использовании самого примитивного способа кодирования скрытой информации (путём модификации младшего значащего бита) каждая точка изображения кодирует 1 бит скрываемого сообщения. В отличие от изображений не каждое значение параметра, являющегося индексом инструкции в словаре, может быть моди-
фицировано, т. е. не все инструкции позволяют замену на эквивалентные. Встает вопрос о том, какая информационная емкость может быть достигнута при кодировании скрытой информации в исполняемом коде программы. Для того чтобы оценить значение данной величины, был проведен ряд экспериментов.
Для каждого модуля проводилась оценка следующих величин:
– количества инструкций, которые могут быть использованы для кодирования бинарных последовательностей Nsym;
– общего количества инструкций, допускающих замену на другие, эквивалентные Nrepl .
Общее число команд в программе (Ntotal) может быть определено по формуле
Ntotal = Nrepl + Nconst ,
где Nconst – количество инструкций, которые не могут быть заменены на эквивалентные. В свою очередь,
Nrepl = Nsym + Ndissym ,
где Ndissym – количество инструкций, допускающих эквивалентную замену, однако только с использованием так называемых «несимметричных» правил подстановки.
Для более наглядного представления полученных результатов (рис. 1) рассматриваются следующие величины:
Sym – процент инструкций, допускающих применение к ним симметричных правил подстановки, определяемый как Nsym / Ntotal ⋅ 100%;
Repl
– процент всех заменяемых инструкций,
определяемый как Nrepl / Ntotal ⋅ 100%.