Защита ПО с помощью HASP SL

Игорь Ананченко (С.-Петербург)

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

Защита прав интеллектуальной собственности предусматривает  ответственность пиратов за незаконное копирование, распространение и использование программного обеспечения. Это хорошо, но прежде пирата необходимо поймать и доказать, что закон нарушил именно он. Поэтому только юридической защитой дело не ограничивается, а используются дополнительно программные и программно-аппаратные методы защиты программного обеспечения.   Простейшая техническая защита программного обеспечения предусматривает ввод  регистрационного кода, который разработчик программного обеспечения сообщает пользователю. Ниже привожу небольшой фрагмент из декомпилированной (взломанной) программы для торговли на рынке Форекс.  Декомпилированный вариант, полученный в результате обработки исходного ex4 файла, нашел на одном из форумов по Форекс. Видно, что информация о копирайте злоумышленников, выложивших восстановленный исходник в сеть Интернет,  не остановила

#property copyright «© ProfitMakerPro.ru»

….

int init() {

….

if (!(IsDemo() || IsTesting() || IsOptimization())) {

if (6.0 * (1.0 * (2.0 * (8.0 * AccountNumber() + 678.0) + 16.0)) != Key) {

ls_0 = «Для торговли на реальном счете нужен лицензионный ключ.»;

ls_8 = «Вы можете получить ключ на сайте www.ProfitMakerPro.ru»;

Print(ls_0);   Print(ls_8);     MessageBox(StringConcatenate(ls_0,

«n», ls_8,  «n»), «Ошибка», MB_ICONHAND); Sleep(93700000);    }   }

….    return (0); }

В функции init()  сравнивается значение вычисленного производного значения от  номера счета AccountNumber() и полученного ранее от продавца ключа (переменная Key), который был передан покупателю. Если значения равны, то функция возвращает ноль и программа работает в штатном режиме. В случае ошибки программа засыпает “навечно” —  Sleep(93700000). Для разработки такой защиты нужно совсем немного времени, так же как и на что, чтобы ее взломать.  (Ремарка. Хотя я взял для иллюстрации реальный пример, но некоторые числа в функции, уважая и ценя чужой труд, изменил. Поэтому, выполнив вычисления по формуле, код регистрации для данного советника вы не получите).

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

library xyz;  {uses   SysUtils,  Classes  ;  }  {$R *.res}

function key(a0:integer;a1:integer;a2:integer;a3:integer;a4:integer;a5:integer;a6:integer):integer;

stdcall; begin  if (a2=a1*7-784351) then key:=0 else key:=1;

end;

function price1(a0:integer;a1:integer;a2:integer;a3:integer;a4:integer;a5:integer;a6:integer):integer;

stdcall;  begin  …… end;

exports key,price1,btp1,stp1,maxorders; begin end.

Скомпилировав исходник, реализованный средствами  Delphi, получаем библиотеку xyz.dll и хранящиеся в ней функции  key,price1,btp1,stp1,maxorders. Функция key отвечает за проверку, остальные содержат части функционала программы. Другими словами, без файла  xyz.dll программа работать не  будет. Но, что мешает злоумышленнику распространять файл библиотеку xyz.dll вместе с вызывающим ее  скомпилированным кодом программы ex4? Ничего не мешает! Для подбора кода регистрации злоумышленнику потребуется больше времени, так как нужно корректно вызвать функцию из библиотеки и подобрать нужный вариант ключа для заданного номера счета.

На основе сказанного можно сделать вывод, что сама библиотека dll так же нуждается в защите. Один из вариантов выполнить шифрование библиотеки и встроить в нее код привязки к некому аппаратному устройству. Можно воспользоваться готовым решением, от какого либо производителя аппаратных средств  защиты. Например, использовать ключ аппаратный HASP HL от фирмы SafeNet.

Существенный недостаток аппаратных ключей защиты – их относительно высокая стоимость (от $15 и выше за один ключ) и необходимость физической пересылки ключа покупателю. SafeNet в рамках серии HASP SRM предлагает интересное решение, когда можно работать с двумя типами ключей. Это аппаратные ключи HASP HL и программные ключи HASP SL. Программные ключи по своей сути —  это начинка аппаратного ключа, оформленная в виде файла. Программный код внутри аппаратного ключа выполняется специализированным процессором, но тот же алгоритм можно реализовать и под управлением процессора компьютера, на котором находится защищаемая программа.

Достоинство ключей HASP SL в том, что не требуется затрат на физическое изготовление ключа, поэтому стоимость ключа будет значительно ниже (от $5 за экземпляр и ниже). Ключ можно практически мгновенно доставить покупателю и он сможет работать с купленной им программой, которая надежно защищена.

Защита с использованием программного ключа HASP SL устанавливается аналогично той, которая ориентирована на работу с аппаратным ключом HASP HL.

Можно использовать инструментарий, не требующий навыков программирования, — это так называемая навесная защита, устанавливаемая на уже готовый программный продукт.  При использовании Sentinel HASP Envelope защита программы устанавливается автоматически буквально за три клика мышкой.   Альтернативный вариант – максимально гибко использовать возможности защиты, программируя на уровне исходного кода. Функции для ручного построения защиты программ Sentinel HASP API интуитивно понятны и четко структурированы. Благодаря этому разработчик не тратит время на подробное изучение реализации интерфейса, а сразу приступает к построению защиты программного обеспечения.  Например, можно использовать следующий фрагмент:

feature:= 15;  status := hasp_login(feature, @vendor_code[1], handle);

if status = HASP_STATUS_OK then  begin  Showmessage(‘Проверка подлинности ключа завершена успешно!’);

end       else       begin        Showmessage(‘Ошибка проверки подлинности ключа’);

Form1.Close;         Exit;   end;

В приведенном примере feature:= 15 – определяет ID, соответствующий защищаемой программе (на одном ключе может храниться информация о нескольких защищенных программах с разными идентификаторами ID), @vendor_code – информация о коде разработчика, для каждой серии ключей этот код свой.  Более подробную информацию можно найти, обратившись по ссылке http://www.aladdin-rd.ru/catalog/hasp/.

Схема работы с HASP SL ключами, если ее расписать по пунктам, следующая:

1. Защищаем программу,  используя Sentinel HASP Envelope и/или Sentinel HASP API, указав ID для данной программы. Допускается вариант, когда программа одна, но используется несколько ID для разных функций или несколько программ, но у них всех один   ID.

2. Используя Business Studio определяем ID для программ(ы). Определяем пакет программ (частный случай – пакет из одной программа), который называем программным продуктом (используя New в Manage Products).

3. Для продукта в Business Studio определяем, будет ли он работать и с HASP SL и HASP HL ключами  или только с HASP SL.

4. Подготавливаем демоверсию продукта (используя New Provisional в Manage Products).

5. Демоверсия поставляется клиенту. Клиент устанавливает ее. На компьютере клиента устанавливается HASP SL ключ с ограниченной лицензией.

6. Клиент работает, пробует, дозревает до состояния – готов купить. Делает свой выбор и оплачивает программный продукт.

7. Клиенту даем специальное программное обеспечение регистрации RUS, отвечающее за возможность удаленного обновления функций ключа защиты. Клиент запускает программу и получает слепок с информацией о параметрах своего компьютера. Этот файл (с расширением c2v), передается продавцу.

3Clip

8.  Получив  файл, продавец его обрабатывает и получает ответный файл формата v2c, который передается покупателю.

9. Покупатель, используя RUS, принимает полученный файл и в ключ HASP SL прописывается постоянная лицензия.

BIGITALRU_post-(2)

Возможна доставка файла c2v продавцу и v2c обратно клиенту электронной почтой, на флэшках и других носителях. Этот вариант активации называется off-line. В варианте on-line задействован специальный web-сервер активации.

Какова цена вопроса?

Видно, что хотя сами  лицензии для HASP SL ключей не дорогие, но надо купить одноразово сервер активаций, а он стоит порядочно, кроме того, пакеты лицензий продают крупными партиями. Решение экономически выгодно для достаточно крупных производителей ПО.

А как быть разработчикам, если они пишут небольшое число программ? Специально для их нужд в сети Интернет действует сервис Protect online (http://www.protect-online.ru/). Сервер активаций размещается в Protect Online, а разработчик (продавец) приобретает  только необходимое количество активаций. Инструкцию по защите программного обеспечения можно скачать по этой ссылке http://www.protect-online.ru/files/protect.pdf.

Защитив программу с помощью утилиты автоматической защиты HASP Envelope (http://www.protect-online.ru/files/Envelope.zip), разработчик получает от компании Protect online список ключей активации лицензии и бесплатную утилиту для онлайн активации.

BIGITALRU_post-(2)-1

Пример присланной информации:

===========================

Feature 9, 2 activations, perpetual

2150278338758337774

==========================

2150278338758337774 – номер ключа лицензии, Feature 9 – ID=9, 2 activations – ключ можно активировать 2 раза, perpetual – лицензия вида:  “работа возможна неограниченное время после активации”. Количество ключей активации равно количеству заказанных лицензий. Кроме того, разработчик бесплатно получает утилиту онлайн активации, необходимую для того, чтобы пользователь самостоятельно установил лицензию и начал работать с программным обеспечением.

Разработчик (продавец) отправляет пользователю защищенную версию ПО, утилиту активации (разработчик может встроить ее в инсталлятор ПО) и ключ активации. Пользователь запускает утилиту активации, которая сама отправляет ключ в Protect Online (требуется однократное подключение к Интернету). Лицензия на программное обеспечение автоматически активируется,  пользователь начинает работу с ПО.  После активации защищенная программа не обращается к серверу активации и не требует подключения к Интернету.

Пошаговая инструкция по установке защищенного ПО на для покупателя:

1. Загружаем файл с архивом универсального драйвера активации http://www.protect-online.ru/files/haspdinst.zip.  Извлекли программу и запустили ее (учетная запись с правами администратора), указав ключ –i:  haspdinst -i

2. Запускаем веббраузер и набираем http://localhost:1947/_int_/devices.html. Видим, что HASP SL ключ установлен. Этот пункт для контроля и его можно пропустить.

3. Запускаем программу SLAct_ru. Ее интерфейс видите на рисунке, приведенном ниже. Программа показывает номер ключа HASP SL. Выбираем кнопку «Онлайн» и нажимаем на нее, после чего становится доступно для ввода поле Product Key. В этом поле записываем номер ключа лицензии, который получили от компании Protect online. Нажимаем кнопку “Активация”. Если есть доступ к сети Интернет и не ошиблись с номером лицензии, то активация проходит успешно.

4. Устанавливаем полученную от продавца программу, например, запустив setup.exe.

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

Пришло время подводить итоги. Во-первых, использование программных ключей HASP SL позволяет сильно осложнить жизнь пиратам. Во-вторых, крупным поставщикам ПО целесообразно купить сервер активации и пакет ключей для надежной защиты ПО. В-третьих, так как сервер активации стоит дорого, то мелким производителям ПО целесообразно пользоваться услугами Protect Online. Минимальный й комплект – 10 ключей лицензий, стоимостью 220 руб. каждая. Для более крупных партий предлагаются скидки до 130 рублей за одну лицензию.

image007

Из сказанного следует, что в настоящее время можно надежно защищать программные продукты с использованием электронных ключей защиты. Причем, стоимость средств защиты не велика, а сами средства защиты не только надежны и высокоэффективны, но и доступны разработчикам программного обеспечения самого разного уровня от крупных фирм до индивидуальных производителей. Технология защиты, основанная на HASP SL, в настоящее время используется не настолько хорошо, как можно было ожидать. Причин для этого вижу несколько, во-первых, технология не слишком хорошо разрекламирована, необходимо затратить некоторое время на ее освоение. Во-вторых, использование ключей HASP SL или HASP HL сопряжено с дополнительными расходами на программную и/или аппаратную часть. Многие производители ПО не уделяют достаточного внимания защите своих продуктов, не понимая, что на этом теряют значительную часть прибылей. Да, защита стоит денег, но упущенная выгода при ее отсутствии значительно больше. В качестве примера программы с установленной защитой привожу ссылку на архив http://mctrewards.ru/files/crisis-com-demo.zip, в котором находятся файлы программы с установленной защитой (собственно о программе  торговли можно прочитать на сайте http://www.forex-crisis.com/).

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *