Защита кода конфигурации, внешних обработок и расширений 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 Россия Абонемент ($m)

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

5 стартмани

19.06.2025    1874    3    krundel    2    

0

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

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

1 стартмани

03.06.2025    2196    user1195929    13    

4

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

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

1 стартмани

09.04.2025    3530    user1195929    6    

4

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

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

1 стартмани

17.03.2025    4399    46    alexyur    9    

7

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

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

3 стартмани

06.03.2025    3449    7    aximo    23    

13

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

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

30.12.2024    10438    artemusII    26    

10

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

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

1 стартмани

09.02.2023    4979    15    aximo    5    

2

Защита ПО и шифрование Программист Абонемент ($m)

Для установки защиты pdf документа, полученного в 1С, написано консольное приложение на c#., использующее одну зависимость pdfSharp.dll. В результате работы приложения ограничены операции над документом и записаны метаданные. С помощью аргументов командной строки можно управлять работой приложения.

2 стартмани

30.01.2023    3966    2    olevlasam    3    

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

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