Почему стандартный метод защиты кода 1С не работает?
Платформа «1С:Предприятие» выполняет код в два этапа:
- Компиляция: исходный текст преобразуется в байт-код — набор инструкций для виртуальной машины 1С.
- Исполнение: виртуальная машина интерпретирует байт-код.
Когда мы устанавливаем пароль на модуль, платформа подготавливает байт-код и сохраняет его в .epf, .cf или .cfe, шифруя исходный код модуля. Проблема в том, что структура байт-кода 1С хорошо документирована в узких кругах, и восстановление исходного текста из него — задача, автоматизированная до одного клика.
Обфускация байт-кода работает иначе: она модифицирует саму последовательность низкоуровневых инструкций. Логика сохраняется, но автоматический декомпилятор выдает либо «мусор», либо неработоспособный код.
Как на практике реализовать защиту кода 1С
1. Подготовка архитектуры
Обратите внимание, что защищаемый код нужно выносить в серверные модули, только из них платформа может сформировать байт-код, который мы впоследствии будем обфусцировать. Модули форм и клиентские модули компилируются иначе, и для них создание устойчивого обфусцированного байт-кода невозможно.
Решение:
- Вся бизнес-логика и алгоритмы проверки лицензии выносятся в Модуль объекта для обработок или в Серверные модули для расширений.
- На формах остаются только вызовы процедур из модуля объекта.
- Данные из макетов, например, настройки или двоичные данные, переносятся непосредственно в код в виде сериализованных строк или Base64, чтобы их нельзя было извлечь через дерево объектов. При этом, если обфускатор не поддерживает автоматическое шифрование строк, сериализованные строки с данными необходимо предварительно зашифровать и уже в зашифрованном виде записывать в модуль с методом для расшифровки.
2. Пример локальной привязки кода 1С к «железу»
Генерацию Hardware ID (HID) для защиты от копирования можно реализовать по схеме:
// Пример получения уникального идентификатора системы
Функция ПолучитьИдентификаторСистемы()
СистемнаяИнформация = Новый СистемнаяИнформация;
ХешированиеДанных = Новый ХешированиеДанных(ХешФункция.MD5);
ХешированиеДанных.Добавить(СистемнаяИнформация.Процессор);
ХешированиеДанных.Добавить(Строка(СистемнаяИнформация.ТипПлатформы));
Возврат ПолучитьHexСтрокуИзДвоичныхДанных(ХешированиеДанных.ХешСумма);
КонецФункции
Когда код будет запускаться на компьютере с другим процессором или на другой операционной системе — HID будет отличаться и проверка не будет пройдена.

Пример сообщения при непройденной проверке лицензии
3. Процесс обфускации
После внедрения проверки на идентификатор системы используется специализированный обфускатор, например, решения на базе V8Unpack или коммерческие продукты для модификации байт-кода. Обфускатор принимает на входе файл .epf, .cf или .cfe и возвращает его после обфускации выбранных модулей.
4. Этапы сборки
- Разработчик передает пользователю обработку для формирования HID.
- Пользователь формирует и передает разработчику свой HID.
- Разработчик записывает в исходный код обработки полученный HID и проверку на его соответствие. Если HID соответствует сохраненному, то обработка работает, а если нет — выдает ошибку.
- Разработчик обфусцирует байт-код обработки.
- Пользователь получает обработку с внедренной защитой.
Тестирование и замеры защищаемого кода
При использовании обфускации важно отслеживать два параметра: размер файла и время выполнения. Эти значения зависят от выбранного обфускатора и реализованных в нем алгоритмов. Например, в наших замерах размер итогового файла существенно увеличился, но при увеличении исходного файла — разница становилась менее заметной. В производительности заметной разницы не обнаружено.
| Параметр | Исходная обработка | Защищенная обработка |
|---|---|---|
| Размер файла (.epf) | 52 КБ | 644 КБ |
| Время выполнения расчета (10 000 итераций) | 1.16 сек | 1.32 сек |
Выводы
Когда стоит использовать обфускацию байт-кода 1С:
- Вы продаете решение (конфигурации, обработки, расширения) без привязки к своим серверам.
- Бюджет проекта не позволяет внедрить полноценную СЛК.
- Необходимо защитить уникальные алгоритмы, которые являются вашим конкурентным преимуществом.
Когда этот метод неэффективен:
- В облачных сервисах (1С:Фреш), где контроль над средой исполнения ограничен.
- Для простых интерфейсных «красивостей», т.к. формы защитить сложно.
Вступайте в нашу телеграмм-группу Инфостарт