Проблема программной защиты исходного кода во внешних обработках .epf и отчетах .erf актуальна для многих разработчиков, желающих защитить свои решения от несанкционированного копирования или изменения. Стандартный путь через Конфигуратор (установка пароля на модуль) не всегда удобен, если обработки генерируются или собираются автоматически. В этой статье мы разберем внутреннее устройство контейнера 1С и выясним, можно ли программно имитировать процесс установки пароля и компиляции байт-кода.
Для начала проанализируем, как 1С хранит данные модуля внутри файла обработки. Любая внешняя обработка является структурированным хранилищем (контейнером). Если разобрать её с помощью утилиты типа V8Unpack, мы увидим, что программный модуль представлен тремя основными файлами:
Основная сложность программной установки пароля заключается не в самом шифровании текста, а в формировании файла IMAGE. Платформа 1С не предоставляет официального API (библиотек) для компиляции текста модуля в байт-код вне среды Конфигуратора. Рассмотрим основные аспекты этой проблемы:
backend.dll. Прямое обращение к её функциям крайне затруднительно из-за закрытых интерфейсов и специфических C++ классов.IMAGE обработка может открыться в Конфигураторе, но не будет выполняться в режиме 1С:Предприятие.Если мы всё же решим реализовать установку пароля программно, нам необходимо выполнить следующие шаги. Разберем этот процесс по шагам:
Шаг 1. Подготовка содержимого TEXT
Нам необходимо зашифровать исходный текст модуля. В современных версиях платформы (начиная с 8.3) для этих целей используется алгоритм AES. Ключ шифрования генерируется на основе пароля, который вы хотите установить. Важно учитывать, что 1С добавляет определенные заголовки к зашифрованному блоку данных, чтобы при открытии в Конфигураторе система поняла, что модуль защищен.
Шаг 2. Формирование файла INFO
В этом файле нужно изменить байт-флаг, отвечающий за статус защиты. Рассмотрим примерную структуру: нам нужно найти позицию, отвечающую за "защищенность", и установить там значение, соответствующее состоянию "установлен пароль". Также здесь сохраняется хеш пароля, с которым платформа будет сравнивать введенный пользователем пароль при попытке редактирования.
Шаг 3. Решение вопроса с IMAGE
Поскольку честная компиляция байт-кода программно — задача из области глубокого реверс-инжиниринга, проанализируем более простые обходные пути:
TEXT и обновляем метаданные. Если текст модуля будет расшифрован корректно при открытии в Конфигураторе, платформа сама пересоберет IMAGE при первом сохранении.УстановитьПарольНаМодуль() в COM нет, некоторые разработчики используют скрипты автоматизации (например, на Python или AutoIt), которые управляют окнами Конфигуратора в фоновом режиме, имитируя действия пользователя. Это медленный, но надежный способ получить валидный байт-код.Разберем метод, который упоминался в обсуждении как работающая альтернатива. Вместо того чтобы пытаться "обмануть" Конфигуратор, можно поступить иначе:
SHA256 или AES) и помещается в раздел Двоичные данные внешней обработки.Выполнить().Пример реализации такой загрузки:
Процедура ВыполнитьЗащищенныйКод()
ЗашифрованныеДанные = ПолучитьМакет("ОсновнойКод");
ТекстМодуля = РасшифроватьДанные(ЗашифрованныеДанные, "ВашСекретныйКлюч");
Выполнить(ТекстМодуля);
КонецПроцедуры
Этот способ позволяет полностью скрыть алгоритмы от пользователя, не прибегая к сложным манипуляциям с форматом IMAGE. Однако стоит помнить, что использование функции Выполнить() может быть ограничено профилями безопасности в облачных сервисах или защищенных контурах.
Проанализировав ситуацию, можно сделать вывод: полноценная программная компиляция байт-кода 1С без использования самой платформы крайне трудозатратна и нестабильна. Если ваша цель — обеспечить возможность правки кода в Конфигураторе после ввода пароля, лучшим решением будет:
OneScript), которые умеют корректно упаковывать файлы обратно в контейнер.TEXT и модификация INFO, полагаясь на то, что Конфигуратор обновит IMAGE при первом интерактивном взаимодействии.Помните, что любые манипуляции с бинарными файлами платформы (такими как backend.dll) могут нарушать условия лицензионного соглашения 1С, поэтому рекомендуем придерживаться методов работы с файлами-контейнерами .epf как с набором данных.