Защита кода конфигурации, внешних обработок и расширений 1С с использованием обфускатора байт-кода

19.02.26

Разработка - Защита ПО и шифрование

Платформенная защита модулей конфигураций, внешних обработок и расширений 1С легко «взламывается» общедоступными декомпиляторами, а использование СЛК (Система лицензирования и защиты конфигураций) часто избыточно из-за необходимости установки дополнительного ПО и покупки ключей. Рассмотрим использование методики защиты логики через обфускацию байт-кода, а именно частный случай использования метода, который позволит привязать решение к «железу» пользователя без использования внешних компонент и онлайн-активации.

Почему стандартный метод защиты кода 1С не работает?

Платформа «1С:Предприятие» выполняет код в два этапа:

  • Компиляция: исходный текст преобразуется в байт-код — набор инструкций для виртуальной машины 1С.
  • Исполнение: виртуальная машина интерпретирует байт-код.

Когда мы устанавливаем пароль на модуль, платформа подготавливает байт-код и сохраняет его в .epf, .cf или .cfe, шифруя исходный код модуля. Проблема в том, что структура байт-кода 1С хорошо документирована в узких кругах, и восстановление исходного текста из него — задача, автоматизированная до одного клика.

Обфускация байт-кода работает иначе: она модифицирует саму последовательность низкоуровневых инструкций. Логика сохраняется, но автоматический декомпилятор выдает либо «мусор», либо неработоспособный код.

 

Как на практике реализовать защиту кода 1С


1. Подготовка архитектуры

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

Решение:

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


2. Пример локальной привязки кода 1С к «железу»

Генерацию Hardware ID (HID) для защиты от копирования можно реализовать по схеме:

// Пример получения уникального идентификатора системы
Функция ПолучитьИдентификаторСистемы()
	
	СистемнаяИнформация = Новый СистемнаяИнформация;
	ХешированиеДанных = Новый ХешированиеДанных(ХешФункция.MD5);
	ХешированиеДанных.Добавить(СистемнаяИнформация.Процессор);
	ХешированиеДанных.Добавить(Строка(СистемнаяИнформация.ТипПлатформы));
	
	Возврат ПолучитьHexСтрокуИзДвоичныхДанных(ХешированиеДанных.ХешСумма);
	
КонецФункции

Когда код будет запускаться на компьютере с другим процессором или на другой операционной системе — HID будет отличаться и проверка не будет пройдена.


Пример сообщения с ошибкой

Пример сообщения при непройденной проверке лицензии


3. Процесс обфускации

После внедрения проверки на идентификатор системы используется специализированный обфускатор, например, решения на базе V8Unpack или коммерческие продукты для модификации байт-кода. Обфускатор принимает на входе файл .epf, .cf или .cfe и возвращает его после обфускации выбранных модулей.


4. Этапы сборки

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


Тестирование и замеры защищаемого кода

При использовании обфускации важно отслеживать два параметра: размер файла и время выполнения. Эти значения зависят от выбранного обфускатора и реализованных в нем алгоритмов. Например, в  наших замерах размер итогового файла существенно увеличился, но при увеличении исходного файла — разница становилась менее заметной. В производительности заметной разницы не обнаружено.
 

Параметр Исходная обработка Защищенная обработка
Размер файла (.epf) 52 КБ 644 КБ
Время выполнения расчета (10 000 итераций) 1.16 сек 1.32 сек


Выводы

Когда стоит использовать обфускацию байт-кода 1С:

  • Вы продаете решение (конфигурации, обработки, расширения) без привязки к своим серверам.
  • Бюджет проекта не позволяет внедрить полноценную СЛК.
  • Необходимо защитить уникальные алгоритмы, которые являются вашим конкурентным преимуществом.

Когда этот метод неэффективен:

  • В облачных сервисах (1С:Фреш), где контроль над средой исполнения ограничен.
  • Для простых интерфейсных «красивостей», т.к. формы защитить сложно.

Вступайте в нашу телеграмм-группу Инфостарт

внешние обработки расширения защита кода обфускация защита конфигурации лицензирование

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Защита ПО и шифрование Программист 1С 8.3 1С:Розница 2 Бесплатно (free)

Учебная обработка показывает, как 1С шифрует номер карты публичным ключом RSA перед отправкой в платёжный шлюз и подписывает тело запроса - на чистом встроенном языке, без COM, .NET и внешних компонент. Почти все реализации RSA в 1С зовут .NET через COM, а он требует регистрации сборки и не работает на Linux и в тонком клиенте. Здесь RSA написан целиком на BSL: длинная арифметика, деление Кнута, возведение в степень по модулю. Корректность сверена с эталоном на больших числах байт в байт. Демо-ключ 256 бит, всё локально, одной кнопкой. Код открыт.

07.08.2026    424    1    nedomolkov.ivan    1    

1

Защита ПО и шифрование Программист Бесплатно (free)

Платёжный шлюз принимает номер карты только зашифрованным по RSA, а почти все реализации RSA в 1С зовут .NET через COM - и это молча ломается на Linux-сервере, в тонком клиенте и на голой Windows без regasm. Разбираю, как написать RSA целиком на встроенном языке: как хранить большие числа лимбами по основанию миллион, откуда берётся деление Кнута и square-and-multiply, почему первая версия считала 25 секунд и как это ускорилось в 8 раз. С проверкой байт в байт против внешнего эталона на больших числах.

07.08.2026    506    nedomolkov.ivan    1    

3

Защита ПО и шифрование Программист Бухгалтер Пользователь 1С:Предприятие 8 Россия Абонемент ($m)

Обработка для подписи с помощью сертификата (ЭЦП) произвольных файлов, средствами платформы 1С.

5 стартмани

19.06.2025    2226    4    krundel    2    

0

Защита ПО и шифрование 1С:Предприятие 8 Абонемент ($m)

Как спрятать свои секретные файлы от глаз любого? Всё просто, прячем все свои файлы (видео. документы, архивы, фото, да вообще любые файлы) в картинку или фото. Картинка при этом остается такой же красочной и визуально не изменившейся (лишь подрастет её вес). Стало интересно? Посмотри, как это делается, на скриншотах, если лень читать описание.

1 стартмани

03.06.2025    2558    user1195929    13    

4

Защита ПО и шифрование Программист 1С:Предприятие 8 Абонемент ($m)

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

1 стартмани

09.04.2025    4154    user1195929    6    

4

Защита ПО и шифрование Программист 1С:Предприятие 8 Россия Абонемент ($m)

Обработки, в которых реализованы алгоритмы шифрования ГОСТ 34.10-2012, RSA-1024, AES-256-GCM, XChacha20-poly1305. Реализация нативно на чистом 1С без COM-объектов и внешних компонент.

1 стартмани

17.03.2025    5417    58    alexyur    10    

7

Защита ПО и шифрование Программист 1С:Предприятие 8 1С:Управление торговлей 11 Абонемент ($m)

Небольшой пример - "лайф-хак" по установке собственного пароля на отчет или обработку, не втягивая в это RLS.

3 стартмани

06.03.2025    3858    7    aximo    23    

13

Защита ПО и шифрование Программист 1С:Предприятие 8 Бесплатно (free)

В статье приведен простой способ защиты кода внешней обработки от несанкционированного доступа (если это необходимо).

30.12.2024    11318    artemusII    26    

10
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. SerVer1C 1121 19.02.26 17:20 Сейчас в теме
Как кодер, съевший собаку на байт-коде от 1С и как создатель собственного обфускатора байт-кода могу с уверенностью сказать, что данная защита обходится с помощью простого бит-хака (в контексте с 1С - опкод-хака).
Но для честных людей норм )
ivv1970; BigB; mRconik; aximo; +4 Ответить
3. 1c-izh 170 20.02.26 11:32 Сейчас в теме
(1) Да, любая офлайн защита обходится — вопрос затрачиваемого времени и использованных алгоритмов. Можно сделать проверку менее очевидной и разбить ее на несколько методов, но если человек смог получить байт-код в читаемом виде, понимает его структуру и знает какие команды искать — то защита не поможет.
9. ivv1970 30 25.03.26 14:28 Сейчас в теме
(1) Для нечестных тоже норм. )))))
2. aximo 2723 19.02.26 18:39 Сейчас в теме
не проверял, но понравилось!
4. 1c-izh 170 20.02.26 15:16 Сейчас в теме
5. Cyberhawk 135 04.03.26 06:50 Сейчас в теме
Когда мы устанавливаем пароль на модуль, платформа подготавливает байт-код
Пароль на модуль это же чисто интерфейсная заглушка (на уровне просмотра в конфигураторе). Весь текст модуля при этом остается в конфигурации в неизменном виде, т.к. после ввода пароля в коде присутствуют все исходные комментарии (а в байт-коде их точно нет).

А в байт-код платформа превращает по идее только те модули, которые мы исключили из файлов поставки (тогда при открытии будет отображаться сообщение "Исходный текст модуля отсутствует").
6. 1c-izh 170 04.03.26 11:13 Сейчас в теме
(5) При скрытии паролем дополнительно формируется зашифрованный исходный текст, байт-код подготавливается идентичный в обоих случаях. В качестве эксперимента можно заменить байт код, при этом не меняя зашифрованный текст — тогда в конфигураторе будет отображаться один код, а выполнятся другой. Разумеется, работать это будет до сохранения изменений в модуле в конфигураторе.
7. kpotoyalo 17.03.26 12:26 Сейчас в теме
Как решаете вопрос привязки к железу в условиях распределенного кластера?
8. 1c-izh 170 19.03.26 13:49 Сейчас в теме
(7) хороший вопрос) в таких условиях данный алгоритм пока не пробовали
Для отправки сообщения требуется регистрация/авторизация