Защита для .NET-приложенийАвтор: Виктор Деревянко Опубликовано: 11.11.2008 Источник: SoftKey.info Любой разработчик, занимающийся разработкой коммерческих приложений, рано или поздно сталкивается с проблемой организации защиты приложения от копирования и взлома. Как правило, разработка качественной системы защиты своими силами - процесс достаточно сложный и трудоемкий. Поэтому большинство разработчиков стараются выбрать более простое и быстрое решение - воспользоваться готовой системой защиты.
В подавляющем большинстве случаев защита строится на основе использования файлов лицензии (или серийных номеров). Пользователю предоставляется пробная версия программы, содержащая ряд ограничений. Например, в пробной версии могут быть ограничены функциональность, время работы, количество запусков и т. д. После того как пользователь попробует программу в действии, решит, что она ему подходит, и оплатит ее, разработчики высылают ему файл лицензии. При наличии такого файла программа начинает работать как полнофункциональная. Свободное распространение файлов лицензии тем или иным образом ограничивается. Например, файлы могут генерироваться с привязкой к "железу" компьютера пользователя так, чтобы ими нельзя было воспользоваться на других компьютерах. Одновременно система защиты применяет кодирование и шифрование данных, чтобы усложнить хакеру взлом программы и отключение привязки к файлу лицензии. Разнообразных вариаций такой защиты может быть великое множество, но общий принцип примерно один и тот же.
Реализация такой схемы лицензирования является нетривиальной задачей и сама по себе имеет много нюансов. Однако защита приложений, написанных под Microsoft .Net, этим не ограничивается. Помимо привязки к файлу лицензии и защиты от копирования необходимо еще защитить исходные коды приложения от просмотра. Как известно, в отличие от традиционных Windows-приложений, которые при компиляции преобразуются в низкоуровневый машинный код, NET-приложения компилируются в машинно-независимый язык Common Intermediate Language. Если приложение никак не защитить, то с помощью специальных инструментов типа .NET Reflector можно за несколько минут выполнить декомпиляцию и восстановить исходный код приложения в пригодном для изучения виде.
Задачу защиты исходного кода программы от изучения посторонними личностями решают специальные программы - обфускаторы. Обфускаторы усложняют исходные коды программы, запутывают его, делают более трудными для понимания, но при этом сохраняют функциональность работоспособной. Хорошие обфускаторы применяют, кроме этого, разнообразные методы, затрудняющие или делающие невозможным декомпиляцию кода.
Программный продукт .Net Reactor, выпускаемый компанией Eziriz e.K., содержит все перечисленные средства защиты Net-приложений. Реализованная в нем технология NecroBit защищает приложение от декомпиляции путем смешивания управляемого и машинного (native) кода. .Net Reactor содержит средства обфускации классов, типов и переменных, дополненные шифрованием строк, использованием непечатных символов при обфускации имен и даже возможностью обфускации графа потока управления. Продукт реализует развитую схему лицензирования приложений. И, что особенно немаловажно, .Net Reactor стоит гораздо дешевле большинства альтернативных средств защиты, о чем разработчики прямо заявляют на страницах своего сайта.
Защищаем приложение с помощью .Net Reactor
.Net Reactor реализует графический пользовательский интерфейс, позволяющий наложить защиту на уже готовое приложение. Интерфейс удобный и интуитивно понятный. Защита накладывается с помощью мастера за несколько шагов.
На первом шаге необходимо указать режим защиты, выбрать основную защищаемую сборку и опционально дополнительные сборки, указать, требуется ли использовать защиту от декомпиляции NecroBit и обфускацию.
 | | Главное окно .Net Reactor | .Net Reactor поддерживает два режима защиты: защита библиотеки и защита приложения. Если выбран режим защиты приложения, то дополнительные сборки объединяются вместе с основной в один файл. В режиме защиты библиотеки дополнительные сборки могут либо защищаться каждая отдельно, либо объединяться с основной сборкой. Кроме того, при защите в режиме библиотеки сборка защищается таким образом, чтобы ее можно было в дальнейшем использовать из других приложений.
На втором шаге осуществляется более тонкая настройка параметров защиты, включающая, в частности, следующие возможности:
- включить компрессию кода сборки;
- включить поддержку Compact Framework;
- настроить параметры обфускации - указать уровень обфускации графа потока управления, разрешить использование непечатных символов в обфусцированных именах, запретить обфусцирование открытых типов сборки и т. д.;
- включить режим шифрования строк;
- указать параметры подписи сборки строгим именем.
Кроме того, на втором шаге задается поведение приложения в отсутствии файла лицензии. Другими словами, задаются параметры демонстрационного (пробного, "триального") режима работы приложения.
 | | Настройки параметров защиты в .Net Reactor | .Net Reactor позволяет установить множество различных ограничений на демонстрационный режим работы приложения:
- количество дней, в течение которых работает демонстрационная версия;
- фиксированное количество минут, после истечения которых приложение автоматически закрывается;
- фиксированная дата окончания действия демонстрационной версии;
- максимальное количество запусков демонстрационной версии;
- максимальное количество одновременно запущенных экземпляров приложения.
Можно задать произвольную комбинацию ограничений и указать, в каком именно случае демонстрационная версия должна прекратить функционировать - при первом срабатывании любого из ограничений или лишь после срабатывания всех указанных ограничений. Можно включить режим показа при запуске приложения nagscreen (экранов ворчания) и указать, с какого дня использования демонстрационной версии они будут показываться. Можно задать команду, которая должна выполняться после закрытия демонстрационного приложения после прекращения его функционирования: обычно - это открытие веб-странички, на которой объясняется, как приобрести полнофункциональную версию. Наконец, можно вообще запретить работу приложения без файла лицензии.
Третий шаг - настройка менеджера лицензий. Здесь можно указать ограничения при работе приложения, которые будут применяться, когда имеется файл лицензий. То есть если файл лицензии отсутствует, то используется набор ограничений, указанный на втором шаге. Если присутствует - то набор, указанный на третьем шаге. Переключение между одним и другим набором ограничений .Net Reactor выполняет автоматически. Таким образом, для того чтобы демонстрационная версия превратилась в полнофункциональную, пользователю достаточно поместить в директорию приложения файл лицензии.
 | | Настройки менеджера лицензий .Net Reactor | В наборе ограничений на третьем шаге присутствует дополнительное ограничение Hardware lock. С его помощью можно создавать файлы лицензии, привязанные к конкретному компьютеру. Привязка осуществляется на основе произвольной комбинации идентификаторов "железа" компьютера - системной платы, CPU, жесткого диска, сетевой карты.
В настройках менеджера лицензий присутствует еще один любопытный пункт - флаг Individual Licensing Behaviour. Предположим, пользователь получил от вас два файла лицензии с ограничением на 10 запусков. Если этот флаг включен, то у пользователя будет возможность запустить приложение 20 раз. Если выключен - то только десять.
Последний шаг - это собственно наложение защиты. Весь процесс полностью автоматизирован и занимает несколько секунд. В той директории, в которой размещена основная защищаемая сборка, .Net Reactor создает поддиректорию и помещает в нее защищенные файлы.
 | | Процесс наложения защиты |
Дополнительные возможности
.Net Reactor позволяют реализовать схему активации по телефону. По команде Phone Activation System .Net Reactor создает два файла - client.exe и server.exe. Утилита client.exe выдает код привязки к "железу". Утилита server.exe генерирует ответный код. При вводе ответного кода утилита client.exe создает файл лицензии.
 | | Реализация системы активации по телефону | .Net Reactor предоставляет весьма полезную возможность включать в файл лицензии произвольную пользовательскую информацию в виде списка пар "ключ - значение". Приложение может получить доступ к этой информации через функции SDK.
С помощью функций SDK также можно определить текущий статус лицензии в процессе работы приложения, извлечь уникальный идентификатор, с помощью которого осуществляется привязка к "железу", сделать файл лицензии недействительным при переносе приложения с одного компьютера на другой и даже организовать собственную систему активации. Ряд подобных функций продублирован в .Net Reactor в виде отдельных инструментов, доступных через меню приложения.
 | | Набор инструментов в .Net Reactor | .Net Reactor может интегрироваться с Microsoft Visual Studio и работать в режиме командной строки.
 | | Окно плагина .Net Reactor в Microsoft Visual Studio 2005 |
.Net Reactor: за и против
Как и любая другая система защиты, .Net Reactor имеет свои плюсы и минусы. К плюсам прежде всего относятся полнота и комплексность предоставляемой защиты, а также невысокая стоимость продукта. По этим параметрам .Net Reactor прекрасно подойдет небольшим компаниям и частным разработчикам, которые ищут недорогую и простую в использовании систему защиты для своего .Net-приложения.
Что касается минусов, то их, по большому счету, два. Первый - систему можно сломать. Впрочем, это можно сказать о любой системе защиты, поэтому каждый разработчик должен сам для себя решить вопрос, достаточный ли уровень защиты обеспечивает .Net Reactor. Рекомендую посмотреть по этому вопросу дискуссии на тему .Net Reactor на форумах Joel of Software и Reverse Engineering Team Board, а также сравнительную статью по возможностям обфускаторов.
Второй минус - .Net Reactor фактически модифицирует код защищаемой сборки, и не во всех случаях такая модификация безобидна. Например, с помощью текущей версии .Net Reactor 3.9.0.1 не удается защитить приложения, написанные с применением библиотеки Elegant Ribbon - защищенные сборки перестают работать. Поэтому, прежде чем приобретать .Net Reactor, имеет смысл погонять пробную версию и убедиться, что на ваших приложениях его защита корректно работает и не вызывает никаких проблем.
Системные требования
Windows 98/ME/NT/2000/XP/Server 2003/Vista.
Поддерживаются: .NET 1.1, 2.0, 3.0 & 3.5, .NET Compact Framework 1.0, 2.0, ASP.NET и Mono. |