(Быстро и легко, а главное совершенно бесплатно, Вы можете защитить программу собственной разработки, распространяемую в сети Интернет)
Общеизвестно, что незаконное копирование программных продуктов несет огромные убытки их разработчикам. Пользователи ПК находят очень выгодным покупать пиратские компакт диски за 60-70 рублей, на каждый из которых содержит программное обеспечение, оцениваемое в несколько сотен, а то и тысяч долларов. Юридические и моральные проблемы, связанные с незаконным использованием чужого труда, рядового пользователя ПК интересуют мало. Нельзя сказать, что совсем не заботят, но слишком заманчиво экономически предложение пиратов, от которого нельзя отказаться. Понимание и глубокое осознание компьютерного пиратства как явления совершенно недопустимого зачастую приходит лишь только тогда, когда видишь программы собственной разработки на все тех же пиратский дисках и со слезами начинаешь считать упущенную прибыль.
Бороться с нелегальным распространением программного обеспечения необходимо комплексно, как мерами административного воздействия на нарушителей, так и техническими, ставящими надежный заслон нелегальному распространению программ.
Программно-аппаратная защита
Программно-аппаратная защита не может гарантировать 100% защиту от незаконного копирования и взлома, но гарантия с вероятностью в 85-99% это гораздо лучше, чем ничего. Традиционно используемые решения: аппаратные ключи (подключаемые к com, lpt или usb разъемам) для дорогостоящего (от $300-400) программного обеспечения или программная привязка к конфигурации конкретного компьютера, используемая для недорогих программных средств. Достойны высшего уважения альтруисты, распространяющие свои собственные программные разработки бесплатно или с указанием цены, но без какой либо защиты. Делать ставку на совесть пользователей, которая заставит их заплатить, благородно, но, увы, с учетом современных экономических реалий не слишком практично.
Решая вопрос о том, как наиболее просто, быстро и надежно защитить программы своей собственной разработки, распространяемые в Интернет, я исходил из следующих соображений:
- Защита должна быть надежной, эффективной, но в тоже время простой в установке и использовании;
- Самостоятельно разработать программную защиту, способную противостоять квалифицированным хакерам (точнее кракерам) мне в настоящий момент не по силам, поэтому следует воспользоваться профессиональной разработкой стороннего производителя;
- Продавая программы, я хочу зарабатывать деньги, но вложить большую сумму своих собственных в дорогостоящую систему защиты я, в настоящий момент, не готов - типичная ситуация для начинающего разработчика. Причем дело здесь не в жадности как в таковой, а в том, что не знаешь, насколько успешно будет покупаться твоя собственная разработка, поэтому желательна система защиты полностью бесплатная или с возможностью последующей оплаты.
- Программы будут распространяться в Интернет, поэтому вариант с использованием защиты на аппаратных ключах-затычках не проходит в принципе. Во-первых, это слишком дорого, так как стоимость аппаратного ключа больше стоимости моей программы, а во-вторых, неудобно, так как аппаратный ключ пользователю по Сети не пошлешь.
Защита от Software Activation Service
Найти программную защиту, удовлетворяющую сформулированным критериям, удалось на удивление быстро. Причем решение оказалось не только бесплатным, но и увязанным с сервисом крупной системы электронных платежей WebMoney Transfer http://www.webmoney.ru (на момент подготовки статьи система насчитывает более 540 тыс. зарегистрированных участников, при ежедневном приросте примерно в 700 новых пользователей). Интеграция с системой электронных платежей – дополнительный плюс, позволяющий пользователям максимально быстро заплатить за программный продукт и избавляющий автора разработки от многих проблем, связанных с приемом денежных средств. Минус выбранной системы защиты в том, что для активации купленной программы пользователю необходимо выходить в Интернет, но это минус не для моего варианта распространения программного продукта, изначально ориентированного на Интернет. Необходимость установки программного обеспечения (ПО) от системы WebMoney Transfer, тоже нельзя назвать большим неудобством, так как программа не занимает много места, а процесс ее установки элементарен.
В защите от Software Activation Service (http://www.softactivation.com/) предлагается для покупателей-участников системы WebMoney Transfer вместо HardwareID использовать KeeperID: уникальный идентификатор для пользователя WebMoney Transfer, являющийся функцией от идентификационных данных пользователя системы и кода продукта (то есть некий уникальный ID). Разработанный способ "привязки" регистрационного кода или ключа к покупателю таков, что никто не может использовать купленную программу на компьютере, на котором нет клиентского ПО системы WebMoney Transfer - WebMoney Keeper Classic и файлов для работы со счетом конкретного покупателя программного продукта в этой платежной системе. Но, если бы разработчики остановились только на этом, то стал бы возможен следующий неприятный сценарий. Злоумышленник, решивший заработать продажей программы с защитой по WMID, регистрируется в системе WebMoney Transfer под вымышленным именем и переводит на свой кошелек ровно столько средств, сколько необходимо для покупки программы. Записывает купленную программу и регистрационный код на диск. На него же записывает свой WMID, пароль и файлы ключей. Прилагает покупателям инструкцию, как установить WebMoney Keeper и войти в систему под указанным WMID! Вот и все – программа стала достояние пиратов. Алгоритм простой, но на деле не все так просто, если используется Software Activation Service сервис.
Software Activation Service сервис
Любой разработчик shareware-программ можете бесплатно зарегистрироваться на этом сервисе. Для регистрации необходимо стать участником системы WebMoney Transfer, регистрация в которой тоже бесплатна. Зарегистрировавшись на сервисе, разработчик может добавлять в базу данных сервиса свои новые программные продукты. Добавляемый продукт описывается и выполняется настройка политики активации регистрационного кода продукта. Можно установить, сколько раз покупатель будет использовать регистрационный код, полученный при покупке. Установив значение этого параметра равное трем, можно разрешить участнику системы WebMoney Transfer купившему программу, установить и запускать её дома, на работе, а также предоставить одну резервную установку (необходимость в которой может возникнуть, например, в случае переустановки операционной системы). Механизм контроля за тем сколько раз покупателю программы позволено использовать регистрационный код, полученный при покупке, позволяет не опасаться того, что после покупки товар окажется на одном из пиратских CD. Разработчику программы не требуется обрабатывать и такие моменты, как переустановка системы или смена сетевой карты, приводящие к смене HardwareID для программной защиты, построенной общепринятыми способами. В нашем случае, при запуске программа скажет, что пользователь ввел корректные регистрационные данные, но регистрационный код не был активирован для использования на этом компьютере, а значит работа с программой невозможна.
Активация регистрационного кода - онлайновая процедура, требующая выполнения команды на серверe Software Activation Service. В параметрах команды передается, что такой-то WMID просит активировать регистрационный код для такой-то программы. Сервис извлекает из базы данных определенное разработчиком максимально возможное количество активаций для данного программного продукта, количество активаций регистрационного кода этого продукта, произведенных данным WMID и сравнивает. Если активация возможна - возвращается код активации, сохраняемый на компьютере. Процедура закончена, программа успешно зарегистрирована. Код активации - данные, уникальные для каждого рабочего места, программы и WMID, поэтому копирование кода активации на другой компьютер бесполезно – выполнив его злоумышленник не сможет запустить программу.
Разработчику программного обеспечения будут полезны дополнительные возможности предоставляемые Software Activation Service:
- "чёрный список" для WMID "неблагонадежных" участников системы WebMoney Transfer, которые никогда не смогут активировать регистрационные коды ваших продуктов, полученные незаконным способом. Это решение более удобно, чем прошивка данных об "украденных ключах" в файле проекта HardKey или ASProtect, так как сервис онлайновый и в момент активации используются самые последние данные из "чёрного списка". Разумеется, разработчик может вычеркнуть "исправившийся" WMID из списка;
- разрешение спорных ситуаций: пользователь программы мог по объективным причинам израсходовать отведенный ему лимит активаций. Если его аргументы убедительны, то ему можно увеличить разрешенное число активаций.
Техническая информация для разработчика
Для защиты программ рекомендуется использовать последнюю версию HardKey System. В SDK HardKey System (комплекте разработчика) поддерживаются языки программирования: Microsoft Visual C++, Borland C++ Builder и Bolrand Delphi. Замечу, что HardKey System можно использовать для защиты программ без привязки к WMID, но это возможно только в коммерческих (платных) версиях программы.
HardKey распространяется в виде следующих пакетов:
- HardKey Lite WebMoney Edition - бесплатная версия, поддерживающая регистрацию продуктов только через сервис WebMoney;
- HardKey Lite - облегченная версия;
- HardKey Pro - профессиональная версия, содержащая базу данных регистраций, парсеры регистрационной информации от регистраторов, внешний генератор серийных номеров, поддерживающая работу с email-темплейтами.
Предлагаемый сервисом начинающим "шароварщикам" бесплатный HardKey License Manager Lite WM Edition обеспечивает наиболее дешевый путь для старта, но разработчики продукта обращают особое внимание на то, что этот продукт позволяет, прежде всего, генерировать "короткие" серийные номера (собственно сам HK Manager) и проверять их корректность (SDK). Программа базируется на строгих алгоритмах асимметричной (с открытым ключом) криптографии. HardKey работает с короткими серийными номерами длиной 15-25 символов (например, VNUQM-PYHEX-7F25H-SJZBR). При этом использование криптостойкого алгоритма HFE гарантирует невозможность создания генератора ключей взломщиком. Серийный номер может опционально содержать следующие поля:
- Hardware ID - позволяет привязать данный номер к некоторому оборудованию компьютера;
- Expire Date - позволяет создавать временные серийные номера с ограниченным сроком использования.
В серийный номер всегда интегрируется информация о типе лицензий (допустимо до 8 типов разных лицензий). Для одного и того же имени регистрации можно сгенерировать несколько разных серийных номеров (не менее 1000). Это очень удобно при покупке нескольких лицензий на одно и то же имя (например, на имя организации). Для того чтобы приложение было защищено более серьезно, рекомендуется использовать дополнительные (увы, платные) продукты, позволяющие шифровать куски кода программы, определять наличие отладчика (dubugger), используемого для взлома, и содержащие еще много неприятных сюрпризов для желающих воспользоваться чужим трудом. В качестве интегрируемых программных средств усиления защиты назову ExeCryptor (от автора программы HardKey) и лидера направления программное средство ASProtect.
HardKey System, как уже было сказано, поддерживает работу с программами, написанными на трех языках программирования. Первоначально я планировал включить в статью подробный пример подключения защиты для программы, написанной на одном из поддерживаемых языков. Но после некоторых раздумий решил этого не делать. Во-первых, печатная площадь всегда лимитирована, во-вторых, специфика конкретного языка при описании подключения модуля всеравно даст о себе знать, в-третьих, программное обеспечение HardKey System постоянно развивается (на момент публикации на сайте доступна версия 4.0), а значит, возможны особенности подключения связанные с конкретной версией программу. Поэтому заинтересовавшихся отсылаю к производителю, у которого можно скачать последнюю версию программного продукта с детальной инструкцией по применению и примерами подключения защиты для каждого из языков программирования.
- В качестве краткой иллюстрации ограничусь только примером записи заголовка функции VerifyRegCode проверки серийного номера из модуля KeyVerify (работаем с Delphi) и описанием ее параметров:
function VerifyRegCode(const RegName, RegCode: string; var LicType: TLicType; var LicName,LicInfo: string; var Expire: TDateTime): TVerifyResult;
Эта функция принимает два аргумента RegName - имя регистрации (или WebMoney ID покупателя) и RegCode - серийный номер.
Коды возврата:
vrOK серийный номер правильный;
vrEmpty RegName и/или RegCode пусто;
vrInvalid неверный серийный номер;
vrBlackList номер заблокирован;
vrExpired срок действия серийного номера истек;
vrInvalidHWID HardwareID серийного номера не совпадает с HardwareID компьютера;
vrNotActivated пользователь отменил активацию серийного номера;
Также возвращается следующая информация:
LicType - тип лицензии серийного номера (0..7);
LicName,LicInfo - информация о типе лицензии;
Expire - дата истечения срока действия серийного номера (0 в случае если срок действия не ограничен).
Гладко только на бумаге или подводные камни использования защиты
Известно, что описание работы системы в теории зачастую расходится с ее поведением на практике. Стремясь к максимально объективной оценке представляемой системе защиты, остановлюсь на одном неприятном моменте, с которым мне пришлось столкнуться, используя HardKey License Manager Lite WM Edition: на одном из компьютеров возникли проблемы связанные с прохождением активации. Пользователь получал следующее сообщение “Произошла ошибка при активации регистрационного кода. Код ошибки: 22”. Причем ошибка активации в диалоговом сообщении была отнесена к ошибке неизвестного типа, поэтому, не имея возможности самостоятельно разобраться в причинах ее возникновения, я был вынужден обратиться к разработчикам системы защиты. С помощью весьма оперативно ответившей службы поддержки мне удалось выяснить, что такая ситуация может возникнуть в случае, когда программа не может
"пообщаться" с сервером Software Activation Service (то есть не удается корректно обработать XML запрос). В ходе общения с пользователем, у которого возникли проблемы с активацией программы, выяснилось, что хотя он использует последнюю версию WebMoney Keeper Classic 2.2.0.8, но этого не достаточно для успешной активации, так как программа не хочет “дружить” с Microsoft Internet Explorer version: 5.50.4522.1800IC. В частной переписке пользователь сообщил, что интернет браузер был установлен с пиратского компакт диска (еще раз к вопросу о недопустимости использования пиратского ПО, которое может быть не полным, поврежденным или содержать вирусы!!!). Вопрос с активацией был успешно решен переустановкой браузера (вероятно взятого пользователем с более свежего пиратского диска).
Рассказав о единичном случае, вызвавшим накладки с использованием конкретной защиты, поделюсь общими соображениями на тот счет, что любая защита хотя и приносит пользу, но осложняет жизнь не только пользователям, но и разработчику. Если бы программист мог с первого раза написать программу, не содержащую серьезных или мелких ошибок, то число релизов программных продуктов было бы на несколько порядков меньше. Чем сложнее программный продукт, чем больше объем программного кода, тем труднее его оттестировать и отследить возможные ошибки. Ошибки допускают не только разработчики прикладных программ, но и операционных систем (ОС). Вспомним, например, широко распространенную ОС Windows NT для которой Macrosoft выпустила целых 6 сервис паков. Каждый из них устранял несколько десятков допущенных ошибок (в том числе ошибки связанные с уязвимостью системы, то есть с возможностью получения несанкционированного доступа к ресурсам ОС). Добавляя к вашей программе модуль защиты, вы ограждаете ваш труд от посягательств компьютерных пиратов, но система защиты это тоже программный код написанный другим человеком. Код этот должен, например, в рассматриваемом случае, определять параметры компьютера пользователя для формирования уникального кода привязки, сообщить эти данные на сервер и выполнить еще целый ряд достаточно сложных операций. Добросовестный разработчик системы защиты старается максимально полно протестировать свое творение на отсутствие ошибок, но всего не предусмотришь. Поэтому возможна ситуация когда ваша программа будет работать у пользователя плохо (или не будет работать вообще) не только из-за ваших собственных ошибок, но и из-за ошибок связанных с защитой. Как следствие, используя системы защиты, будьте морально и материально готовы к тому, что некоторым пользователям купившим ваш программный продукт придется вернуть деньги, так как программа не работает на их компьютерах. В утешение могу сказать только то, что без использования системы защиты разработчик программ несет убытки от пиратов намного больше, чем те которые порой имеет место из-за некорректной работы системы защиты.