Создание тиражного решения на платформе 1С неизбежно ставит перед разработчиком вопрос: как защитить свои интеллектуальные права и гарантировать оплату лицензий? В отличие от многих других языков программирования, 1С поставляется с открытым или частично закрытым исходным кодом, что упрощает несанкционированное копирование. В данной статье мы проанализируем опыт ведущих разработчиков и разберем основные стратегии создания сервера лицензирования и механизмов защиты программного обеспечения.
Наиболее надежным и легальным способом для экосистемы 1С является использование СЛК (Системы лицензирования и защиты конфигураций). Это совместный продукт фирмы «1С» и компании «Катран Софт». Рассмотрим подробнее, как работает эта система:
Проанализируем техническую сторону: при использовании СЛК программа обращается к локальному или удаленному серверу лицензирования. Если сервер не отвечает или лицензия исчерпана, зашифрованные методы просто не вернут результат, что приведет к неработоспособности защищенного функционала.
Если стандартное решение СЛК кажется избыточным или дорогим, разработчики часто прибегают к созданию собственной архитектуры. Разберем по шагам, как организовать такую систему:
1. Клиентская часть (Внешняя компонента):
Использование встроенного языка 1С для проверки лицензии неэффективно, так как проверку легко «закомментировать». Поэтому логику проверки выносят во внешнюю компоненту (Native API или COM), написанную на C++, C# или Go. Внешняя компонента собирает уникальный идентификатор оборудования (HWID), комбинируя серийные номера компонентов ПК и «соль» (секретную строку).
2. Серверная часть (Backend):
Для обработки запросов от тысяч клиентов требуется производительный сервер. Рассмотрим два основных подхода:
HTTPСервис, который будет принимать POST-запросы с зашифрованными данными.Посмотрим на пример простейшего HTTP-сервиса на стороне сервера 1С:
Функция ПроверитьЛицензию(Запрос)
ДанныеЗапроса = Запрос.ПолучитьТелоКакСтроку();
// Дешифруем данные, полученные от клиента
СтруктураЛицензии = ДешифроватьДанные(ДанныеЗапроса);
ЗапросБД = Новый Запрос;
ЗапросБД.Текст = "ВЫБРАТЬ Статус ИЗ РегистрСведений.Лицензии ГДЕ Ключ = &Ключ";
ЗапросБД.УстановитьПараметр("Ключ", СтруктураЛицензии.Ключ);
Результат = ЗапросБД.Выполнить();
Если Результат.Пустой() Тогда
Возврат Новый HTTPСервисОтвет(403); // Лицензия не найдена
Иначе
Возврат Новый HTTPСервисОтвет(200); // Лицензия активна
КонецЕсли;
КонецФункции
Одной из главных проблем является риск «падения» интернета у клиента. Если программа будет закрываться мгновенно при потере связи, это вызовет гнев пользователей. Рассмотрим правильный алгоритм «мягкой» проверки:
ФоновыеЗадания. Раз в несколько часов запускается задание, которое «стучится» на сервер.Проанализируем ситуацию: что мешает хакеру подменить адрес вашего сервера в файле hosts на свой локальный адрес и всегда возвращать «OK»? Для защиты от этого необходимо использовать асимметричное шифрование (RSA):
Также важно использовать Certificate Pinning — жесткую привязку отпечатка SSL-сертификата внутри кода ВК, чтобы исключить перехват трафика через прокси-серверы.
Помимо СЛК, существуют проверенные временем инструменты, такие как КЗК2 (Куликовская защита конфигураций). Она позволяет скомпилировать модули 1С в байт-код, который исполняется через специальную внешнюю компоненту. Это отличный баланс между ценой и надежностью для небольших тиражных решений.
Для высокобюджетных Enterprise-решений до сих пор актуальны аппаратные ключи (например, Guardant или Sentinel). Их преимущество в том, что алгоритм защиты зашит в чип самого USB-токена, и его практически невозможно эмулировать программно.
Подводя итог, выделим основные правила создания надежной системы лицензирования:
ПроверитьСтатусЛицензии() на а1_0о01(). Это значительно усложнит анализ вашей защиты.Рассмотренные методы позволяют создать гибкую и защищенную систему, которая обеспечит безопасность ваших разработок и стабильный доход от лицензирования.