Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник 400.docx
Скачиваний:
25
Добавлен:
30.04.2022
Размер:
3.61 Mб
Скачать

2.1.1 Классификации механизмов защиты программного обеспечения (по)

Системы защиты ПО были придуманы для того, чтобы создатели программного обеспечения могли получать финансовые вознаграждения за свой труд. Для этого есть 2 способа:

  • попытаться заинтересовать пользователя в его приобретении. Это привело к мысли создавать «Shareware» программы (то есть условно-бесплатные). Такой «софт» можно бесплатно скачать и пользоваться. Однако, ограничения ставятся на некоторые функции ПО, или же на время использования. То есть, если программа нужна пользователю, он ее рано или поздно должен будет приобрести. Приобретение сводится к продаже пользователю регистрационного кода, сгенерированного для него (то есть на основе его данных, хотя в некоторых случаях, серийные номера могут генерироваться случайно, но иметь общие свойства – например чтобы деление одной части ключа на другую давало всегда один и тот же остаток, известный программе). При всем этом необходимо заботиться о том, чтобы покупатель, ее не смог свободно распространять. Однако, до сих пор существует множество программ, которые можно купить один раз и распространять неограниченными тиражами[1].

  • продавать программу сразу, но опять же заботиться о защите нелегального распространения.

Описанное выше можно назвать «внешними» системами защиты. «Внутренние» системы – это средства затруднения взлома и анализа машинного кода программы, такие как использование специальных приемов против отладчиков, упаковка (сжатие), шифрование, проверка целостности машинного кода (например через «циклический избыточный код» CRC, либо другие эффективные алгоритмы, к примеру коды Рида-Соломона, которые не только говорят о «неправильных» байтах, но и могут их восстанавливать).

Для защиты от нелегального распространения используют либо «привязку» к конкретному компьютеру пользователя, либо снабжают ПО специальным устройством, которое трудно продублировать. В роли «привязки» – считывание уникальных данных аппаратуры (например: процессора, жесткого диска, настроек и версий операционной системы и т.д.), после чего создается ключевой файл либо запись в реестре, либо используется любое другое хранилище ключевой информации. При каждом запуске программы такой ключ генерируется заново и сверяется с тем, что создавался при регистрации. Их несовпадение говорит о том, что программа либо запущена на другой машине или пользователь сменил часть аппаратуры. Из-за второго варианта могут возникать претензии со стороны легального пользователя, поэтому с таким методом защиты разработчики очень осторожны. Так же, зарегистрированная программа, может оставить специальную метку в файловой системе, однозначно идентифицируя данный компьютер, что проще и не вызовет претензий пользователя при замене, ну, скажем, процессора, но все же менее надежно при нелегальном копировании[2].

В роли специальных устройств может выступать HASP-ключ, дискета или CD, подготовленные особым образом, и т.д. К примеру - программа записана на CD со специальными метками, который невозможно скопировать штатными средствами. Так или иначе, эти устройства выполняют роль регистрационного ключа, и должны являться гарантом того, что данная копия программы принесла прибыль разработчикам[3].

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

Взлом программного обеспечения можно разделить на несколько категорий – «математический» взлом, «эмуляция условий» и программный (грубый) взлом.

«Математический» взлом - это исследование алгоритма генерации серийного номера находящегося внутри программы-жертвы и создание на его основе генератора серийных номеров (так называемый «KeyGen»), который распространяется вместе с программой. При таком взломе целостность программы-жертвы остается неименной. Для выявления такого алгоритма требуются глубокие знания в математике и программировании (в частности – языка Assembler), а так же знание особенностей компиляторов от разных разработчиков.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]