Как защитить внешнюю обработку в 1С от редактирования и просмотра исходного кода

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

При разработке уникальных алгоритмов, отчетов и обработок для платформы 1С:Предприятие часто возникает необходимость защитить авторские решения от несанкционированного копирования, изменения или нелицензионного использования. Простая установка пароля на модуль формы в современных версиях платформы либо недоступна, либо легко обходится. В этом материале мы подробно разберем эффективные способы защиты бизнес-логики внешних обработок (файлов .epf), начиная от штатных средств платформы и заканчивая продвинутыми архитектурными решениями.

Способ 1. Исключение исходного текста модулей через комплект поставки

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

Рассмотрим пошагово, как реализовать этот процесс:

  1. Добавление обработки в конфигурацию: Откроем пустую или технологическую конфигурацию в режиме Конфигуратора и вставим защищаемую внешнюю обработку в дерево объектов (в раздел Обработки).
  2. Открытие настройки поставки: В главном меню выберем пункт Конфигурация — Поставка конфигурации — Настройка поставки....
  3. Настройка правил включения исходных текстов: В открывшемся дереве объектов находим нашу добавленную обработку и дважды щелкаем по ней (либо открываем контекстное меню). В окне свойств объекта снимаем флажок «Включать в поставку исходный текст модулей объекта».
  4. Создание файла поставки: Выполняем сборку комплекта поставки и сохраняем файл конфигурации (.cf). На этом этапе платформа компилирует модули обработки в байт-код, исключая текстовое представление алгоритмов.
  5. Получение готового файла обработки: Загружаем полученный файл .cf в чистую информационную базу. Заходим в дерево конфигурации, находим нашу обработку, щелкаем по ней правой кнопкой мыши и выбираем команду Сохранить как внешнюю обработку, отчет....

В результате мы получаем файл .epf, который запускается и работает в обычном режиме, но при попытке открыть его модули в Конфигураторе пользователь увидит пустые окна модулей.

Способ 2. Обфускация (запутывание) исходного кода

Если необходимо оставить код в текстовом виде (например, для выполнения на клиенте или для соответствия с требованиями регламентных процедур), проанализируем метод обфускации. Обфускация — это приведение исходного текста программы к виду, сохраняющему функциональность, но максимально затрудняющему понимание алгоритмов при анализе и декомпиляции.

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

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

Разберем разницу на примере. Исходный понятный фрагмент кода:


Функция РассчитатьСкидку(СуммаДокумента, Процент) Экспорт
    // Расчет итоговой суммы со скидкой
    Результат = СуммаДокумента - (СуммаДокумента * Процент / 100);
    Возврат Результат;
КонецФункции

После прохождения процедуры обфускации код принимает трудночитаемый вид, сберегая функциональность:

Функция o0o(o1,o2) Экспорт Возврат o1-(o1*o2/100); КонецФункции

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

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

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

Схема взаимодействия выглядит следующим образом:

  1. Внешняя обработка формирует HTTP-запрос с входными данными (например, в формате JSON) и отправляет его по защищенному протоколу HTTPS на веб-сервис разработчика.
  2. Удаленный веб-сервер принимает данные, проверяет лицензию, выполняет основной алгоритм и возвращает результат.
  3. Обработка принимает ответ, раскодирует данные и выводит их пользователю в интерфейсе 1С.

Поскольку ключевой алгоритм физически не находится на компьютере клиента, скопировать или декомпилировать его технически невозможно.

Способ 4. Использование внешних компонент (Native API)

Для защиты наиболее сложных вычислений алгоритмы можно реализовать на компилируемых языках программирования (C++, Rust) и собрать в виде бинарного файла внешней компоненты (.dll для Windows или .so для Linux).

Внешняя компонента подключается непосредственно в модуле 1С через встроенный механизм:


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

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

Способ 5. Программные привязки и ограничение использования

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

  1. Привязка к ИНН/КПП: В модуль добавляется проверка ИНН организации из константы или учетной политики. Если обработка запускается в базе с чужим ИНН, выполнение прекращается.
  2. Привязка к GUID информационной базы: Посредством функции УникальныйИдентификатор() полученой из строки соединения с базой, выполняется проверка на соответствие разрешенному идентификатору.
  3. Сетевая авторизация: Запрос к серверу лицензирования для проверки срока действия подписки при каждом запуске.

Технические ограничения и особенности работы с защищенным кодом

Проанализируем важные нюансы, которые необходимо учитывать при выборе метода защиты внешних обработок:

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

2. Особенности управляемых форм:
В управляемом приложении клиентские процедуры формы исполняются на стороне тонкого клиента. Защитить клиентский код методом поставки без исходников сложнее. Поэтому рекомендуется переносить всю ключевую бизнес-логику и тяжелые расчеты в **Модуль объекта** обработки, который исполняется исключительно на сервере, оставляя в модуле формы только минимальный интерфейсный код.

3. Ограничения в сервис-облаках (1С:Предприятие через браузер / 1С:Fresh):
Обратите внимание, что сервисы модели SaaS (включая 1С:Fresh) предъявляют жесткие требования к безопасности. Внешние обработки с полностью закрытым кодом (без исходников), обфусцированным текстом или внешними компонентами не пройдут обязательный аудит безопасности и не будут допущены к публикации в сервисе.

← На главную