Разработка тиражных расширений для платформы 1С:Предприятие неизбежно сталкивается с вопросом защиты авторских прав и контроля лицензионного использования. Основная сложность заключается в том, что код расширений относительно легко декомпилируется, а многие клиенты работают в закрытых контурах без стабильного доступа к интернету. Разберем комплексный подход к созданию системы защиты, которая обеспечит безопасность вашего интеллектуального труда и при этом будет удобна для конечного пользователя.
Для создания надежной защиты мы не можем полагаться на один единственный механизм. Проанализируем наиболее эффективную стратегию, которая сочетает в себе онлайн-активацию и автономную работу. Суть метода заключается в том, что расширение обращается к вашему серверу (например, арендованному VPS) только один раз при первом запуске или с определенной периодичностью (раз в месяц или квартал).
Рассмотрим, как это работает по шагам:
Fingerprint) сервера клиента.HTTP-сервис.Одним из самых слабых мест в защите 1С является открытость исходного кода. Даже при использовании встроенных средств скрытия модулей, опытный специалист может получить доступ к алгоритмам. Выясним, как технология Native API помогает решить эту проблему. Вместо написания всей логики на языке 1С, мы можем вынести критически важные функции (например, сложные расчеты, алгоритмы формирования цен или специфические государственные проверки) во внешнюю компоненту, написанную на C++, Rust или Go.
Разберем преимущества такого подхода:
Windows, так и под Linux.Чтобы клиент не мог просто скопировать информационную базу на другой сервер и продолжить работу, нам необходимо реализовать привязку к аппаратной части. Проанализируем ситуацию: какие данные лучше всего использовать для формирования уникального ID? Программисты часто используют серийный номер материнской платы, UUID процессора или идентификатор системного раздела диска.
В среде Windows это реализуется через WMI. Посмотрим на пример концептуальной схемы получения данных:
// Пример логики получения ID (псевдокод)
Локатор = Новый COMОбъект("WbemScripting.SWbemLocator");
СлужбаWMI = Локатор.ConnectServer(".");
Объекты = СлужбаWMI.ExecQuery("SELECT SerialNumber FROM Win32_BaseBoard");
Для Каждого Объект Из Объекты Цикл
СерийныйНомер = Объект.SerialNumber;
КонецЦикла;
Важно помнить, что в облачных средах и виртуальных машинах эти данные могут меняться или быть недоступны, поэтому систему привязки следует делать гибкой, учитывающей несколько параметров одновременно.
Для защиты самого файла лицензии, который хранится у клиента, мы рекомендуем использовать асимметричное шифрование. Это исключает возможность подделки лицензии, даже если пользователь найдет место её хранения. Разберем алгоритм работы:
Вы генерируете пару ключей: приватный (хранится только у вас) и публичный (вшивается в код расширения). Когда сервер активации выдает лицензию, он подписывает данные (ID оборудования, срок действия, набор функций) вашим приватным ключом. Расширение с помощью публичного ключа проверяет подпись. Если хотя бы один байт в файле лицензии будет изменен (например, дата окончания), проверка подписи провалится.
Когда интернет отсутствует, расширение должно где-то брать информацию о том, что оно активировано. Проанализируем наиболее защищенные места в структуре 1С:
БезопасноеХранилищеДанных. Данные в нем шифруются на уровне платформы и привязываются к конкретной базе. Доступ к ним извне (через консоли запросов или прямой доступ к СУБД) крайне затруднен.Посмотрим, как программно работать с безопасным хранилищем для записи токена:
// Запись ключа в безопасное хранилище
ЗначениеДляХранения = "Ваш_Зашифрованный_Токен_Активации";
БезопасноеХранилищеДанных.Записать("Лицензия_МоеРасширение", ЗначениеДляХранения);
// Чтение ключа
КлючЛицензии = БезопасноеХранилищеДанных.Прочитать("Лицензия_МоеРасширение");
Частая уловка пользователей для обхода временных лицензий — перевод системного времени назад. Чтобы предотвратить это, выясним причину блокировки в таких случаях. Мы можем использовать метод «Счетчика тиков» или фиксацию последнего времени запуска. При каждом запуске системы расширение должно сравнивать текущее время с временем последнего успешного запуска, сохраненным в скрытом месте. Если текущее время меньше сохраненного — значит, имела место манипуляция со временем, и работу следует заблокировать.
Даже если вы вынесли часть логики в компоненту, основной код 1С все равно нуждается в защите. Простая «Нетленка» или встроенное скрытие модулей — это лишь первый рубеж. Рассмотрим более глубокую обфускацию:
а1_009б).Цель обфускации — сделать стоимость взлома (затраты времени программиста на реверс-инжиниринг) выше, чем стоимость покупки легальной лицензии.
Важно помнить, что в 1С пользователь с правами администратора может просто зайти в список расширений и снять галочку «Активно» или включить «Безопасный режим», который блокирует работу внешних компонент. Разберем способы противодействия:
ПриУстановкеПараметровСеанса или в модули часто используемых документов.Подводя итог, создание надежной защиты — это всегда баланс между безопасностью и удобством. Использование Native API для логики, RSA для подписи лицензий и Безопасного хранилища для оффлайн-работы обеспечит высокий уровень защиты вашего продукта в экосистеме 1С.