Безопасность в Дельфи

       

Как установить защиту


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

Напомним, что электронные ключи предоставляют 2 метода защиты - внедрение вызовов функций API в исходный код программы (API-защита) и автоматическая защита исполняемого файла.

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

Вот примеры вызова этих функций для Delphi:

function nnkLogin( dwPrivateRD:longint ):integer; stdcall; external; function nnkLogout( dwPrivateRD:longint ):integer; stdcall; external; procedure nnkSetMode(dwFlags:longint; bProg:byte; dwID:longint; wSN:word; bVer:byte; wMask, wType:word ); stdcall; external; ………………………………………………. ………………………………………………. { ---- Trying to login onto dongle server ---- } nnkSetMode (dwFlags, bProg, dwID, wSN, bVer, wMask, wType ); nRet := nnkLogin ( PrivRD ); if ( nRet <> 0 ) then begin nRet := nnkLogout ( PrivRD ); Halt(255); end; { of IF } ……………………… ……………………… { ---- Logout from dongle server (End of Net session) ---- } nRet := nnkLogout ( PrivRD ); Halt(0);

Функция SetMode служит для настройки остальных функций API на параметры конкретного ключа (указаны как параметры функции), а PrivRD – код доступа на чтение памяти ключа

При API-защите вызовы функций Login и Logout встраиваются в код «вручную», в случае автозащиты задействуется определенная опция.
К сетевому ключу одновременно могут обращаться несколько копий защищенного приложения.
Поэтому для корректного разделения ресурсов ключа между приложениями, у копии сетевого приложения во время выполнения операций чтения/записи должен быть монопольный доступ к памяти ключа. Это достигается блокированием ключа (функция LockBeg) перед чтением/записью и разблокированием (функция LockEnd) после чтения/записи
Собственно на этом установку сетевых функций защиты можно считать законченной.
Единственное, что остается сделать – перед передачей программы пользователю записать в нужное поле памяти ключа число купленных лицензий.
В случае фирмы N, когда используется система управления лицензиями, схема установки сетевых функций защиты имеет некоторые особенности.

  1. Вместо Login для регистрации приложения используется аналогичная функция, в которой есть дополнительный параметр - номер модуля. Функция LoginLMS не только регистрирует копию приложения на сервере, но и позволяет ей занять определенный ресурс из таблицы лицензий.
    Т. е. при API-защите программисты фирмы N в исходный код каждого из 4 модулей встраивают вызов этой функции, указывая в параметрах номер модуля.
    При автозащите каждый модуль защищается с соответствующей опцией. Остальные функции API используются без изменений.

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

    Рисунок 2. Окно редактирования таблицы лицензий

  3. В память ключа записывается число лицензий.
Для удобства программисты фирмы N разработали специальную утилиту, которая служит для записи в ключ общего ресурса лицензий и ресурса каждого модуля ключа непосредственно перед продажей. Подобную программку легко написать, используя функции API ключа.



Содержание  Назад  Вперед