Система лицензирования и удаленного обновления

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

В созданной нами системе лицензирования и удаленного обновления для электронных ключей SenseLock (кроме модели NET-RTC) мы постарались устранить этот недостаток, сохранив при этом гибкость настроек и простоту использования.

Мастер-ключ

SenseLock EL мастер-ключДля работы c системой лицензирования и создания пакетов удалённого обновления, необходимо наличие мастер-ключа. Только с его помощью могут быть созданы пакеты обновлений, лицензии и записаны данные в ключи пользователей. Мастер-ключ высылается нашей компанией всем клиентам, заказавшим систему автоматической защиты VMProtect SenseLock Edition (в этом случае будет создан единый мастер-ключ, который предоставляется бесплатно) или систему удаленного обновления и лицензирования (необходимо заказать дополнительный ключ SenseLock EL-STD 64). Доступ к мастер-ключу осуществляется посредством ввода пароля. Без правильного пароля создание ключей пользователя, лицензий и пакетов удаленного обновления будет невозможно.

Программирование пользовательских ключей

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


Модуль программирования пользовательских электронных ключей

Модуль "Программирование ключей" также позволяет производить следующие действия:

  • Настройка ПИН-кодов, которые будут установлены в ключе пользователя. ПИН-код пользователя должен совпадать с используемым в защищенной программе, ПИН-код разработчика может быть любым и должен храниться в надежном месте и не должен распространяться.
  • Настройка системы автоматической защиты VMProtect SenseLock Edition, начальный номер обновления (рекомендуется устанавливать равным "1" для новых ключей), максимальное количество лицензий и режим работы исполняемых модулей.
  • Установка идентификатора ATR, который будет установлен в ключе (может использоваться защищенной программой для опознания предназначенных для нее ключей), а также пакеты обновления и лицензий. Последние два параметра не являются обязательными.

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

Система удаленного обновления

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


Модуль системы удаленного обновления электронных ключей

Основные возможности системы удалённого обновления:

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

Система лицензирования


Модуль системы лицензирования электронных ключей

Основные возможности системы лицензирования:

  • Лицензии, функции по их проверке и результат находятся и выполняются в защищенном пространстве электронного ключа и не могут быть изменены злоумышленниками извне!
  • Создание до 255 лицензий в одном электронном ключе. Каждая лицензия имеет собственные независимые настройки.
  • Ограничение времени работы лицензии. Указывается начальная и конечная даты работы лицензии.
  • Ограничение количества запросов на получение лицензии. Данная возможность позволяет ограничить запуск защищаемой функции на произвольное (от 1 до 65535) количество раз.
  • Возможность безопасного удаленного обновления каждой лицензии.
  • Возможность привязки обновления лицензии к уникальному идентификационному номеру электронного ключа SenseLock. Это исключит несанкционированное использование обновления с электронными ключами других пользователей защищенного программного обеспечения.
  • Защита от обновления уже использованной в электронном ключе лицензией.
  • Получение информации о текущем значении параметров лицензии.
  • Возможность дальнейшего гибкого расширения функциональности системы лицензирования.

Принцип работы системы лицензирования

Использование модуля системы лицензирования с защищенным программным обеспечением происходит в два этапа:

Вызов исполняемого модуля лицензирования для получения и проверки лицензии

Вызов исполняемого модуля лицензирования для получения и проверки лицензии

  1. Программа делает запрос в электронный ключ пользователя на получение необходимой лицензии.
  2. Исполняемый модуль лицензирования проверяет параметры лицензии.
  3. Устанавливается статус лицензии в зависимости от результата проверки. Статус проверки хранится в защищенном пространстве внутри электронного ключа пользователя и не может быть изменен извне.
  4. Результат проверки возвращается в защищенную программу. Данный результат носит исключительно информационный характер и никак не влияет на работу системы лицензирования в случае его изменения злоумышленником.

Вызов исполняемого модуля защищенного приложения для выполнения основных функций

Вызов исполняемого модуля защищенного приложения для выполнения основных функций

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

Дополнительные функции системы лицензирования позволяют:

  • Освобождение полученной лицензии из защищенной программы. В этом случае внутри электронного ключа сбрасывается статус полученной лицензии.
  • Получение списка лицензий в электронном ключе пользователя.
  • Получение полной информации о лицензии по ее идентификатору (описывается структурой LM_RECORD_t).
  • Обновление лицензии в электронном ключе пользователя.

Пример использования

Пример получения лицензии и последующий вызов функции исполняемого модуля разработчика:

#define LIC_MODULE_1 0x01 #define LIC_MODULE_1_VER 0x0100 // Код программы ... /* Получение лицензии */ error = SLM_LicCheckout(&s4ctx, LIC_MODULE_1, LIC_MODULE_1_VER); if (error != ERR_LM_SUCCESS) { printf("Ошибка получения лицензии: %08X\n", error); return -1; } /* Выполнение защищённой функции в электронном ключе */ error = ProtectedFunction1(param1, param2, &result); if (error != 0) { printf("Ошибка выполнения функции: %08X\n", error); } else { printf("Результат выполнения: %08X\n", result); } // Код программы ... /* Освобождение полученной лицензии */ SLM_LicCheckin(&s4ctx, LIC_MODULE_1);

Пример проверки статуса лицензии в исполняемом модуле разработчика:

DEFINE_AT(LM_STATUS_t, lic_stat, 0x0400, RAM_EXT); DEFINE_AT(unsigned char, reserved[150], 0x040B, RAM_EXT); IO_PKT_t *input = (IO_PKT_t*)pbInBuff; // Переменные, определения и код защищаемых функций ... void main() { switch (input->tag) { // Функция #1 case CMD_FUNC1 : { // Проверка соответствия идентификатора полученной // лицензии if (lic_stat.id != 1) { error = ERR_LICENSE_NOT_CHECKOUT; break; } // Проверка статуса полученной лицензии if (lic_stat.status != LIC_STAT_VALID) { error = ERR_LICENSE_NOT_VALID; input->buff = lic_stat.status; break; } // Выполнение защищенной функции, если лицензия получена error = func1(input->buff); } break; // Функция #2 case CMD_FUNC2 : { // Проверка соответствия идентификатора полученной // лицензии if (lic_stat.id != 2) { error = ERR_LICENSE_NOT_CHECKOUT; break; } // Проверка статуса полученной лицензии if (lic_stat.status != LIC_STAT_VALID) { error = ERR_LICENSE_NOT_VALID; input->buff = lic_stat.status; break; } // Выполнение защищенной функции, если лицензия получена error = func2(input->buff); } break; default : error = ERR_INVALID_FUNCTION; break; } // Установка возвращаемого кода ошибки input->tag = error; // ... }

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

Стоимость

Для всех наших клиентов система безопасного удаленного обновления и лицензирования предоставляется бесплатно!