Защитить свой продукт

Сегодня мы с вами продолжим разговор о защите программных продуктов коммерческого характера, на создание которых вы потратили свои время и силы и которые любители "халявы", в свою очередь, хотят совершенно безвозмездно получить в своё распоряжение, оставив вас без заслуженного вознаграждения.


Краткое содержание предыдущих серий

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

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

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

 

Сегодня же мы с вами перейдём ко второй части нашего повествования, а именно - к системам защиты приложения от взлома. И для того, чтобы представить себе хотя бы в общих чертах, как именно такая система должна выглядеть и работать, нужно сначала представить себе, каким образом действует взломщик, работающий над "кейгеном" или "патчем" для коммерческого продукта, позволяющим использовать его без покупки.


Как действует взломщик

Думаю, ни для кого не секрет, что в конечном итоге любая программа, не важно, коммерческая или свободная, представляет собой последовательность ассемблерных команд (мы сейчас говорим о программах, транслированных в бинарный код). Команды могут быть непосредственно командами платформенного ассемблера, передаваемыми операционной системой на выполнение процессору. Могут быть командами виртуальной машины, обрабатываемыми ей и транслируемыми в платформенный код специальной средой выполнения приложения. В общем, так или иначе любой исполняемый файл состоит из ассемблерных команд, которые и определяют поведение программы на каждом из этапов её жизни. Соответственно, все защитные механизмы программы также представляются в виде ассемблерного кода и при небольшой модификации будут работать не так, как нужно разработчику, а так, как захочется взломщику. Собственно говоря, именно эта простая идея лежит в основе всей теории и практики взлома программного обеспечения. Соответственно, и "противовзломная" компонента защиты программного обеспечения направлена, в первую очередь, на недопущение модификации защитного кода программы.

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

Для программных продуктов, ограничивающих время пользования своей пробной версией, взломщики зачастую модифицируют создаваемую продуктом пометку о старте испытательного срока, продляя его с обычных 30 до 100500 дней. Нужно, впрочем, заметить, что это сегодня делают реже, чем "патчи", убирающие ограничение испытательного срока, поскольку даже его продление практически до бесконечности не избавляет пользователей от лицезрения nag screen'ов, настойчиво напоминающих о необходимости приобрести лицензионную копию понравившегося им программного продукта. Но, тем не менее, метки в реестре или в файлах "вычисляются" взломщиками с помощью замечательных программ Registry Monitor (RegMon) и File Monitor (FileMon) и затем старательно подправляются. Справедливости ради надо сказать, что эти программы помогают взломщикам и в сборе другой нужной им информации о приложениях, но, думаю, мы еще поговорим о них достаточно подробно дальше.

Для приложений, использующих механизм активации через Интернет, не очень часто, но и не очень редко взломщиками исследуется протокол, по которому они обмениваются информацией с сервером активации. С помощью специального ответа, "скармливаемого" приложению вместо правильного ответа настоящего сервера, достигается работоспособность программного продукта без покупки лицензионного ключа, который был бы распознан сервером как правильный. Но, опять-таки, этот путь более сложный и трудоёмкий, чем модификация кода, который отвечает за связь с сервером и вообще за блокировку работы без правильного лицензионного ключа.


Как действует "антивзлом"

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

Дело в том, что, как показывает практика, невзламываемой защиты не бывает, весь вопрос во времени, необходимом для взлома, и в его конечной стоимости. Опять-таки, если говорить о стоимости взлома, то уместно будет вспомнить и о стоимости защиты - даже если вы пишете её совершенно самостоятельно и вам кажется, что она вообще нисколько не будет стоить, уместно вспомнить широко известную формулу "время - деньги" и пересчитать в денежный эквивалент то время, которое вы потратите на реализацию защиты, которая вам покажется невзламываемой (но совершенно необязательно будет таковой, с точки зрения достаточно высококвалифицированного взломщика). Так вот, зачастую проще действовать не "в лоб", а обманывать взломщика, специально подсовывая ему участки программного кода, которые будут выглядеть похожими на реально отвечающие за проверку регистрационного кода на правильность. Но тут во весь свой немалый рост встает вопрос о том, как узнать, каким образом увидеть такие участки глазами взломщика.

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

Хотя, конечно, это достаточно примитивный приём, и для построения реально качественной защиты необходимо пользоваться целым спектром разных приёмов, не все из которых так просты для того, кто привык работать только с языком высокого уровня. Но об этих приёмах мы с вами прямо сейчас говорить не будем - отложим до лучших времен, вернувшись к теме защиты коммерческого программного обеспечения от несанкционированного использования в одном из следующих номеров "КВ".

Вадим СТАНКЕВИЧ,
dreamdrusch@tut.by

Версия для печатиВерсия для печати

Номер: 

46 за 2010 год

Рубрика: 

Software
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!
 

Комментарии

Страницы

Аватар пользователя Александр
Отладчиком (Softice, WinDBG настроенным на удаленную отладку) трассировать ПЗУ можно. Здесь отсутствие возможности модифицировать код не является препятствием. Нельзя ставить программные точки останова (0xСС)но можно ставить аппаратные(DrX). Виртуальному адресу можно поставить в соответсвтие любой физический и при наступления события (например аппаратного прерывания) будет выполнятся код взломщика. Это к тому что можно и обойти ограничение на установку программных точек прерывания.

Я не вижу здесь неломаемой схемы.

Аватар пользователя mike
>можно ставить аппаратные(DrX) [точки останова].

Содержимое спецрегистров проца поддаётся искажению защитой до останова. Да и чует она такую "отладку".

Аватар пользователя Вадим Станкевич
Нет, ну понятно, что взломать можно всё, и приёмы для настоящего взломщика ерундовые. Но здесь ведь речь не о каких-то оборонных продуктах или стратегических технологиях, а об обычных программах, собранных "на коленке". Адекватная защита для них.
Аватар пользователя mike
>Взломать можно всё, и приёмы для настоящего взломщика ерундовые.

Угу. В 2006г. "Вести" сообщали, что китайцы сообщали, что Скайп они сломали. До сих пор этот подвиг повторяют и повторяют, но не в смысле взлома, а в смысле сообщений о нём.

Аватар пользователя Logic
Вадим Станкевич > Нет, ну понятно, что взломать можно всё...

В том то и дело, что mike утверждает, что НЕ всё!

Аватар пользователя Вадим Станкевич
Logic, ректальный криптоанализ никто не отменял;)
Аватар пользователя mike
>mike утверждает, что НЕ всё [можно сломать]!

Не надо передёргивать. Я всего лишь писал, что существует аппаратная защита, не ломаемая программными методами.

> ректальный криптоанализ никто не отменял

Не хумор. Поди доберись до того места.

Аватар пользователя Al
Смысл защиты - исключить пиратство, если я вас правильно понял. Что творится сейчас с пиратством, все видят. Я считаю, что эти детские методы защиты характерны для неразвитого, дикого рынка в стране, где не действуют или отсутствуют законы об авторском праве. Эта тема была актуальна в БССР лет двадцать назад, сам этим (защитой) грешил. А сейчас-то? Для законопослушных граждан это не нужно. А незаконопослушные всё равно сломают. Так если ли смысл?
Аватар пользователя Logicby
mike (old student) > Я всего лишь писал, что существует аппаратная защита, не ломаемая программными методами.

Типа, если в ящике при поступлении сигнала на вход молоток падает и разбивает склянку с ядом, то программным путём нельзя задержать молоток внутри ящика - можно попробовать тока программным путём не допустить подачи сигнала в ящик?

Аватар пользователя mike
>можно попробовать тока программным путём

Шиш. Токометром.

Страницы