Как защитить исходный код и ограничить срок работы внешней обработки в 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

1. Поставка функционала через расширения без исходного кода

Проанализируем современный штатный механизм платформы 1С:Предприятие 8.3 — использование расширений конфигурации (.cfe). Если логика доработки оформлена в виде расширения, платформа позволяет выполнить экспорт без исходных текстов.

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

2. Обфускация и защита байт-кода

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

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

3. Вынос критической бизнес-логики во внешние компоненты

Разберем один из наиболее надежных способов сокрытия алгоритмов — создание внешней компоненты на компилируемых языках программирования (C++, C#, Rust или Go) по технологии Native API или COM.

В этом сценарии сам модуль 1С содержит лишь минимальную обертку для передачи входных данных и получения результата, а ключевые вычисления или проверки лицензии выполняются внутри скомпилированной динамической библиотеки (.dll или .so).

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


УстановитьВнешнююКомпоненту("ОбщийМакет.КомпонентаЗащиты");
ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаЗащиты", "Защита", ТипВнешнейКомпоненты.Native);
ОбъектЗащиты = Новый("AddIn.Защита.МодульЛицензирования");
Если Не ОбъектЗащиты.ЛицензияАктивна() Тогда
    ВызватьИсключение "Срок демонстрационного периода обработки истек.";
КонецЕсли;

4. Организация удаленной проверки лицензии через HTTP-сервис

Посмотрим, как организовать контроль доступа к функционалу с помощью внешнего сервера разработчика. При выполнении ключевой операции обработка отправляет запрос к удаленному веб-сервису через объект HTTPСоединение.


HTTPСоединение = Новый HTTPСоединение("license.example.com", 443, , , , 10, Новый ЗащищенноеСоединениеOpenSSL());
HTTPЗапрос = Новый HTTPЗапрос("/api/check?client_id=" + ИдентификаторКлиента);
HTTPОтвет = HTTPСоединение.Получить(HTTPЗапрос);

Если HTTPОтвет.КодСостояния <> 200 Тогда
    ПоказатьОповещениеПользователю("Ошибка лицензирования", , "Не удалось подтвердить лицензию на использование обработки.");
    Возврат;
КонецЕсли;

Важное архитектурное правило: сервер должен не просто возвращать булевый флаг «разрешено/запрещено», а отдавать часть критически важных данных или промежуточный результат вычислений, без которых обработка не сможет завершить операцию.

5. Защита от перевода системного времени

Если проверка срока действия завязана исключительно на функцию ТекущаяДата(), заказчик может обойти ограничение простым переводом системных часов на сервере или рабочей станции. Выясним, как повысить надежность локальной проверки:

  1. Контроль по датам документов: сравним текущую дату с датой последнего проведенного документа в информационной базе. Если системная дата меньше даты последних хозяйственных операций, зафиксирован факт отката времени.
  2. Фиксация даты последнего запуска: сохраним дату каждого успешного старта обработки в защищенный параметр или скрытый регистр. Если при следующем запуске текущая дата оказывается меньше сохраненной ранее, запуск блокируется.
  3. Сверка с внешним источником: получим точное время через сетевой запрос к публичным серверам времени или NTP-сервисам.

6. Ограничения безопасного режима платформы

Проанализируем техническое ограничение БСП: при подключении внешней обработки через справочник Дополнительные отчеты и обработки по умолчанию активируется безопасный режим.

В безопасном режиме платформа 1С накладывает строгие ограничения:

  1. Запрещено создание сетевых подключений через HTTPСоединение и WSСоединения.
  2. Заблокирована загрузка внешних компонент через ПодключитьВнешнююКомпоненту().
  3. Запрещен доступ к файловой системе вне временного каталога и работа с внешними приложениями.

Для корректного функционирования внешних компонент или онлайн-проверок при регистрации обработки в БСП необходимо программно запрашивать отключение безопасного режима или описывать требуемые разрешения в функции СведенияОВнешнейОбработке().

7. Правовые аспекты и корректное оформление ограничений

Обратите внимание: внедрение скрытых вредоносных функций, шифрование чужих баз данных или блокировка работы основной конфигурации заказчика подпадают под действие статей 272 и 273 УК РФ (неправомерный доступ к компьютерной информации и создание вредоносных программ).

Механизм защиты должен работать исключительно в рамках передаваемой доработки как официальный демонстрационный режим или ознакомительный период:

  1. Условия демонстрационного периода и порядок блокировки при отсутствии оплаты должны быть зафиксированы в договоре или техническом задании.
  2. При истечении срока обработка должна выдавать корректное информационное сообщение с контактами разработчика для продления ключа.
  3. Ограничения могут накладываться на функционал (например, обработка не более 5 строк табличной части или запрет проведения документов в тестовом режиме), что позволяет клиенту оценить работоспособность решения без передачи полного доступа.
← На главную