При автоматизации обслуживания баз данных 1С:Предприятие системные администраторы и программисты часто прибегают к использованию внешних сценариев на языке VBScript (VBS) или Windows Script Host (WSH). Эти скрипты позволяют выполнять задачи, которые сложно или неэффективно реализовывать средствами встроенного языка 1С, например: остановку служб, архивацию файлов через системные утилиты или взаимодействие с операционной системой на низком уровне. Однако такие файлы хранятся в открытом текстовом виде, что может раскрыть пароли к базам данных или логику работы системы. В этой статье мы разберем, как защитить свой код с помощью обфускации.
Рассмотрим типовую ситуацию: внешняя обработка генерирует .bat или .vbs файл, который должен запуститься по расписанию через планировщик задач Windows. Внутри этого файла могут содержаться:
Чтобы обычный пользователь или злоумышленник не смог прочитать эти данные, открыв файл в блокноте, применяется обфускация — процесс запутывания кода, который делает его нечитаемым для человека, но сохраняет работоспособность для интерпретатора.
Проанализируем инструмент, который долгое время был стандартом для решения этой задачи. Программа Microsoft Script Encoder позволяла преобразовывать исходный код скрипта в формат .vbe (Encoded VBScript). Несмотря на то что Microsoft прекратила официальную поддержку этой утилиты, она все еще встречается в старых обработках на обычных формах (например, для 1С 7.7 или 1С 8.3).
Принцип работы заключается в вызове консольной команды. Разберем пример того, как это может выглядеть в коде 1С при генерации файла:
КомандаЗапуска = "screnc.exe " + ПутьКИсходномуФайлу + " " + ПутьКЗашифрованномуФайлу;
ЗапуститьПриложение(КомандаЗапуска, , Истина);
Результатом работы станет файл с расширением .vbe. Если мы откроем его, то вместо понятных операторов увидим набор случайных символов. Однако стоит помнить, что данный метод не является полноценным шифрованием и может быть расшифрован специальными утилитами (декодерами).
Существуют специализированные инструменты, реализованные в виде внешних обработок 1С. Они автоматизируют процесс создания скриптов для бэкапа (архивации). Посмотрим на алгоритм работы такой обработки:
VBScript.Одним из известных решений является обработка, представленная на профильных сообществах (например, Инфостарт), которая позволяет не только создавать скрипты для SQL и файловых баз, но и скрывать их содержимое.
Если стандартный screnc.exe недоступен или кажется вам недостаточно надежным, рассмотрим современные подходы к защите автоматизации в среде 1С:
1. Использование динамического выполнения через Execute
Мы можем написать скрипт, который будет содержать основной полезный код в виде зашифрованной или закодированной строки (например, в Base64). Основное тело скрипта будет заниматься только расшифровкой этой строки в памяти и последующим запуском. Выглядит это примерно так:
Код = "EncodedStringData...";
РасшифрованныйКод = ФункцияДекодирования(Код);
Execute(РасшифрованныйКод);
Этот метод позволяет избежать создания временных файлов на диске, что значительно повышает уровень безопасности, так как код существует в расшифрованном виде только в оперативной памяти в момент выполнения.
2. Компиляция VBS в исполняемый EXE-файл
Существуют упаковщики (врапперы), такие как VBSEdit или ScriptCryptor. Они упаковывают интерпретатор и ваш скрипт в один файл .exe. Проанализируем преимущества этого подхода:
.vbe файлом.Выясним причину, по которой многие администраторы 1С отказываются от VBS в пользу PowerShell. В современных операционных системах Windows именно PowerShell является основным инструментом автоматизации. Вместо того чтобы пытаться скрыть код (обфусцировать его), PowerShell предлагает механизм цифровых подписей.
Если ваша цель — предотвратить изменение скрипта архивации третьими лицами, лучше всего подписать его сертификатом. В этом случае, если кто-то изменит хотя бы один символ в скрипте бэкапа, Windows заблокирует его выполнение. Для защиты чувствительных данных (паролей) в PowerShell используются SecureString, которые привязываются к конкретному пользователю или компьютеру, что гораздо надежнее простой обфускации текста.
Подводя итог, если вы используете старую обработку 1С и вам необходимо быстро скрыть содержимое скрипта, выполните следующие шаги:
screnc.exe в папке с обработкой или в системных папках Windows.ТекстовыйДокумент для записи временного файла, затем вызывайте обфускатор и удаляйте исходный текстовый файл.Рассмотрим пример очистки временных файлов в 1С после генерации защищенного скрипта:
ФайлНаДиске = Новый Файл(ПутьКИсходнику);
Если ФайлНаДиске.Существует() Тогда
УдалитьФайлы(ПутьКИсходнику);
КонецЕсли;
Важный момент: современные антивирусы часто реагируют на обфусцированные скрипты или упакованные EXE-файлы как на потенциальную угрозу (трояны-дропперы). Если ваша система архивации перестала работать после включения обфускации, проверьте карантин антивируса и добавьте свои скрипты в исключения.