При передаче заказчику внешних отчетов, обработок или модулей конфигурации разработчики нередко сталкиваются с риском неоплаты выполненной работы. Если передать открытый исходный код с простой проверкой даты, любой специалист сможет открыть внешнюю обработку в конфигураторе и удалить блокирующие условия. Разберем основные технические подходы к сокрытию логики и реализации механизмов ограничения срока работы решений в экосистеме 1С:Предприятие.
Проанализируем современный штатный механизм платформы 1С:Предприятие 8.3 — использование расширений конфигурации (.cfe). Если логика доработки оформлена в виде расширения, платформа позволяет выполнить экспорт без исходных текстов.
Рассмотрим применение специализированных обфускаторов для 1С. Обфускация преобразует текст программы и структуру модуля таким образом, что логика работы сохраняется полностью, но исходный код становится практически нечитаемым для человека.
Разберем один из наиболее надежных способов сокрытия алгоритмов — создание внешней компоненты на компилируемых языках программирования (C++, C#, Rust или Go) по технологии Native API или COM.
В этом сценарии сам модуль 1С содержит лишь минимальную обертку для передачи входных данных и получения результата, а ключевые вычисления или проверки лицензии выполняются внутри скомпилированной динамической библиотеки (.dll или .so).
Подключение компоненты в коде 1С выполняется следующим образом:
УстановитьВнешнююКомпоненту("ОбщийМакет.КомпонентаЗащиты");
ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаЗащиты", "Защита", ТипВнешнейКомпоненты.Native);
ОбъектЗащиты = Новый("AddIn.Защита.МодульЛицензирования");
Если Не ОбъектЗащиты.ЛицензияАктивна() Тогда
ВызватьИсключение "Срок демонстрационного периода обработки истек.";
КонецЕсли;
Посмотрим, как организовать контроль доступа к функционалу с помощью внешнего сервера разработчика. При выполнении ключевой операции обработка отправляет запрос к удаленному веб-сервису через объект HTTPСоединение.
HTTPСоединение = Новый HTTPСоединение("license.example.com", 443, , , , 10, Новый ЗащищенноеСоединениеOpenSSL());
HTTPЗапрос = Новый HTTPЗапрос("/api/check?client_id=" + ИдентификаторКлиента);
HTTPОтвет = HTTPСоединение.Получить(HTTPЗапрос);
Если HTTPОтвет.КодСостояния <> 200 Тогда
ПоказатьОповещениеПользователю("Ошибка лицензирования", , "Не удалось подтвердить лицензию на использование обработки.");
Возврат;
КонецЕсли;
Важное архитектурное правило: сервер должен не просто возвращать булевый флаг «разрешено/запрещено», а отдавать часть критически важных данных или промежуточный результат вычислений, без которых обработка не сможет завершить операцию.
Если проверка срока действия завязана исключительно на функцию ТекущаяДата(), заказчик может обойти ограничение простым переводом системных часов на сервере или рабочей станции. Выясним, как повысить надежность локальной проверки:
Проанализируем техническое ограничение БСП: при подключении внешней обработки через справочник Дополнительные отчеты и обработки по умолчанию активируется безопасный режим.
В безопасном режиме платформа 1С накладывает строгие ограничения:
HTTPСоединение и WSСоединения.ПодключитьВнешнююКомпоненту().Для корректного функционирования внешних компонент или онлайн-проверок при регистрации обработки в БСП необходимо программно запрашивать отключение безопасного режима или описывать требуемые разрешения в функции СведенияОВнешнейОбработке().
Обратите внимание: внедрение скрытых вредоносных функций, шифрование чужих баз данных или блокировка работы основной конфигурации заказчика подпадают под действие статей 272 и 273 УК РФ (неправомерный доступ к компьютерной информации и создание вредоносных программ).
Механизм защиты должен работать исключительно в рамках передаваемой доработки как официальный демонстрационный режим или ознакомительный период: