защита кода расширения 1с
Защита конфигураций 1С, отчетов и обработок. Как защитить программный код 1с?
Очень часто у программистов 1С возникает желание каким – то образом защитить свою конфигурацию 1С, обработку или отчет от редактирования и плагиата. Для решения такой задачи существует несколько способов, отличающихся как по степени защиты, так и по трудоемкости. И сегодня мы с вами рассмотрим наиболее популярные, а заодно поговорим про защиту программного кода 1с в целом.
1 способ. Защита кода 1с с помощью пароля (штатный способ)
Это самый простой способ защиты программного кода 1С. С его помощью можно защитить только модули объектов, так как для модулей форм такой опции нет. Подробно про виды программных модулей я рассказывал в этой статье.
Для защиты выбранного модуля объекта необходимо его открыть, а затем в меню выбрать Текст – Установить пароль.
Для повышения эффективности данного способа рекомендуется перенести (или сразу размещать) большую часть программного кода из модулей форм в модули объектов. Не забудьте протестировать работоспособность объекта после переноса кода.
2 способ. Исключение текстов модулей объектов из поставки конфигурации (штатный способ)
С помощью данного штатного способа можно добиться, чтобы модули объектов вообще не содержали никакого программного кода. Как и в предыдущем случае, данным методом нельзя скрыть программный код модулей форм. Поэтому, настоятельно рекомендуется переносить большую часть программного кода из модулей форм в модули объектов.
Для работы с поставкой конфигурации выполняем следующие действия:
1) Прежде всего, требуется настроить саму поставку, исключив тексты требуемых модулей объектов и при необходимости запретить изменения отдельных или всех объектов конфигурации.
Для этого переходим в меню Конфигурация – Поставка конфигурации – Настройка поставки.
В открывшемся окне правил поставки мы для каждого объекта конфигурации можем разрешить или запретить изменения, а также скрыть текст программных модулей (снять галку «Включать поставку исходный текст модулей объектов»).
2) В свойствах конфигурации необходимо указать версию и Поставщика. Затем сохранить все изменения с помощью кнопки «Обновить конфигурацию» или горячей клавишей F7.
3 способ. Запутывание (обфускация) программного кода 1с
Суть данного способа заключается в том, чтобы сделать программный код плохо читаемым. Для этого можно:
— удалить все комментарии;
— удалить форматирование, сделать весь код сплошным текстом;
— использовать вперемешку английские и русские названия ключевых слов и функций;
— использовать вперемешку разные регистры в ключевых словах и переменных.
В результате другому программисту будет проще переписать код «с нуля», чем копировать куски из вашей авторской разработке.
Обфускацию можно выполнить как вручную, так и с помощью различных обработок и сервисов. Перед его применением обязательно следует сделать резервную копию информационной базы для того, чтобы потом самому не «копаться» в плохо читаемом коде при внесении изменений в конфигурацию.
Выводы по защите программного кода в 1С
К сожалению, программа 1С слишком популярна, чтобы защиту программного кода, созданного с её помощью, можно было бы считать абсолютно надежной. На сегодняшний день ни один из имеющихся способов защиты, в том числе коммерческие, не дают 100 % защиты. Тем не менее, применение рассмотренных 3 способов в различных комбинациях могут обеспечить приемлемый уровень защиты ваших авторских прав.
С другой стороны самая сильная сторона конфигураций 1С – это их открытость и возможность доработки. И не стоит главное достоинство системы переводить в её недостаток.
Защита в расширении
Здравствуйте, дорогие друзья!
Данная статья рассчитана на новичков. Далее не последует никаких сложных алгоритмов, математических выкладок или оригинальных приемов использования механизмов платформы.
Этот материал призван ответить на один вопрос: «как доступными средствами сделать простую защиту внешних отчетов/обработок?».
И все вроде замечательно, пока дело не доходит до взаиморасчетов. Оказалось, что был допущен ряд смертельных для проекта ошибок: от отсутствия ТЗ (я в проект вошел не с начала и в спешке) и согласования с ЛПР до условий приемки работы и ввода в эксплуатацию. Но все это лирика, выходящая за рамки публикации.
На повестке два классических вопроса «Кто виноват?» и «Что делать?». Вопрос с виной оставим ответственным за аналитику, а вот с действиям попробуем разобраться.
Защита и распространение
В описанных реалиях становится актуальным вопрос защиты кода, как для основного заказчика, так и при поиске других потенциальных клиентов.
Казалось, что простые варианты закончились, нужно приниматься за изучение создания внешних компонент или приобрести подписку на платный сервис по обфускации. Пока не попалась весьма примечательная статья (спасибо автору, но источник к сожалению не помню). В самой платформе существует возможность установки пароля на код модуля.
И вот тут то на помощь приходит механизм расширений. Создаем расширение, добавляем внешний отчет/обработку, заимствуем нужные подсистемы для удобства вывода и выносим критичные участки кода в общий модуль расширения с дальнейшим запароливанием. Вуаля, и мы защитили разработку чуть ли не самым простым способом из всех доступных.
Данный текст не претендует на оригинальность и исключительность. В комментариях приветствуются замечания, альтернативные способы защиты и просто интересные истории по теме.
Защита кода в 1С
Компания, в которой я работаю, разрабатывает (в том числе и я) свою собственную отраслевую конфигурацию (автоматизация швейного и ткацкого производства). На сегодняшний день конфигурация находится в стадии бурного развития — внедрили пяти клиентам, еще три на подходе. У клиентов масса пожеланий и мы их, по мере возможностей, реализовываем, и вообще готовим нашу конфигурацию к официальному представлению и размещению на сайте 1С.
И с недавних пор, появилась необходимость защищать нашу конфигурацию от воровства (различных швейных предприятий в Ивановской области немерено), мы провели небольшое исследование о методах защиты кода в 1С и результатами я спешу поделиться.
Штатные средства
Начнем со штатных средств защиты своего кода от копирования. Это можно сделать двумя способами.
Установить пароль на текст модуля.
Исключить текст модуля из поставки конфигурации.
При использовании этих методов код модуля превращается в байт-код, который можно декомпилировать (если захотеть) и некоторые инструменты в помощь начинающим есть в свободном доступе (правда они, насколько я знаю, предоставляют только базовые возможности).
Кроме этого, штатными средствами не удастся спрятать код модуля формы (хотя код модуля объекта спрятать можно).
Обфускация кода 1С
Обфускация — приведение кода в нечитаемый вид. Это можно сделать как при помощи специальных обработок (в недавнем обзоре интересного есть подобный пример), так и при помощи специальных сервисов (Нетленка 1С, например).
Также этот обфускацию можно использовать совместно со штатными средствами — обфускации подвергается байт-код скомпилированных модулей 1С.
Плюсами данного способа является простота (вставил код — получил абракадабру) и возможно зашифровать любой код.
А к минусам относится низка степень защиты — на любой обфускатор можно создать деобфускатор.
Использование внешних компонент
Неплохой метод для случаев, когда ценность представляет сам код (какой-либо уникальный алгоритм, например), а не вся конфигурация. Так как вынесение проверки легальности запуска конфигурации во внешнюю компоненту поможет не более чем установка пароля на модуль.
К плюсам данного метода следует отнести высокую надежность скрытия кода: восстановить 1С код из скомпилированной DLL-ки написанной на C++, например, — это та еще задача.
К минусам же, относиться необходимость переписать код 1С на другом языке (что тоже, зачастую, задача нетривиальная) и большие трудности с отладкой.
Решения сторонних разработчиков
Есть компании которые профессионально занимаются вопросом защиты интелектуальной собственности разработчиков на 1С. Примером можно привести компанию WiseAdvice.
Суть их метода сводится к вынесению части кода в отдельную обработку, которая храниться в каком-либо зашифрованном хранилище. Доступ к это части кода осуществляется при помощи специальной внешней компоненты, которая и определяет доступ к зашифрованной обработке.
К плюсам такого подхода относится высока надежность защиты кода (во многих подобных решениях код в расшифрованном виде появляется только в оперативной памяти и только в момент исполнения этого самого кода) и отсутствие необходимости переводить код 1С в код какого-либо другого языка программирования.
А к минусам стоит отнести саму необходимость выносить код во внешние обработки и некоторые другие сложности связанные с использованием подобных систем.
Делая вывод, можно сказать, что нет абсолютно надежного способа защитить свою конфигурацию от нежелательного запуска (поправьте, если не так). В то же время для защиты частей кода от копирования есть немало надежных решений.
Если Вы нашли ошибку или неточность, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Обфускация кода 1С
Для тех, кто «не в курсе», для чего используется обфускация:
Обфускация помогает в ситуации, когда сложному клиенту необходимо передать «Полнофункциональную разработку» с некоторыми ограничениями (до момента оплаты, например):
— у клиента не должно быть возможности править модуль;
— затруднено сопровождение/изменение/тиражирование;
— легко спрятать в модуле любые функции ограничения по сроку, среде исполнения, осуществить простую привязку к «железу»;
— должен оставаться стимул оплатить работу.
Конечно, 100% защиту даст только механизм внешних компонент 1С. Но трудоемкость обфускации минимальна по отношению к созданию внешней компоненты (достаточно обфусцировать несколько ключевых функций). После оплаты восстанавливаем исходный модуль, сопровождение идет в штатном режиме. Трудоемкость восстановления исходных модулей в ручном режиме на основании обфусцированных сопоставима по трудоемкости с разработкой аналогичных.
ПРИМЕР
Исходный код:
Результат:
Обфускация — имя переменной случайное число + шифрование строк
или
Обфускация — имя переменной УИД + шифрование строк
1.Обфускация модуля/модуля формы/функции – приложения по заданным параметрам. Обфусцируются переменные:
— описанные в конструкции переменные
— описанные как параметры функции/процедуры
— анализ контекста выполнения НЕ выполняется
2. Реализована разбивка/шифрование строк по заданным параметрам.
3. При шифровании строк «По умолчанию» функция возврата пароля шифрования «прячется» в обрабатываемом модуле. Ее можно заменить своей функцией, возвращающей аппаратно-зависимый пароль (метка диска, имя машины, наличие сетевого адреса и все, что подскажет Ваша фантазия), тем самым исключить хранение пароля в модуле, реализовать простейшую защиту от несанкционированного использования защищенного модуля.
Соответственно без пароля/неправильном пароле функционал модуля будет недоступен/потерян (в случае шифрования строк).
Порядок работы:
1. В поле «Текст модуля исходный» копируем преобразуемый модуль
2. На вкладке «Параметры шифрования» определяем параметры шифрования строк, при необходимости свою функцию получения пароля
3. Нажимаем кнопку «Обработать»
4. Забираем обфусцированный модуль, заменяем «исходный».
Особенности/ограничения:
1. Обфусцированный модуль в режиме шифрования строк/разбивки может выполняться МЕДЛЕННЕЙ исходного в НЕСКОЛЬКО РАЗ, если зашифрованные строки находятся внутри циклов. ( время обработки тестового модуля обработкой «обфускации» увеличилось примерно в 2-3 раза, по отношению к «чистому» коду)
По умолчанию, новый модуль генерируется универсально. Вычисление пароля происходит при КАЖДОМ вызове расшифровки строки.
Поскольку при обфускации нет возможности автоматически определить, что обрабатываем — модуль формы/модуль приложения, то пока этот нюанс обрабатываем самостоятельно. Правка минимальна.
2. При установке режима шифрования строк разбиваются/шифруются ВСЕ строковые переменные модуля.
3. Имена функций НЕ обрабатываются.(если не указано явное переименование функций)
4. Перенос директив препроцессора, обработка областей модуля НЕ ТЕСТИРОВАЛАСЬ. Вероятно есть ошибки переноса.
6. Подготовка кода.
Может для кого-то не очевидные моменты, связанные с шифровкой строк.
Код вида : ЭтаФорма.Элементы.ИмяЭлемента.Свойство=НекоеЗначение обработка оставит «как есть»
но, если обращение к реквизитам\свойствам использовать строки: переменнаяЭтаФорма[«Элементы»][«ИмяЭлемента»][«Свойство»]=переменная
будет преобразован в: NNN***[FFF***()][FFF***()][FFF***()]=NNN****
будет преобразован в: NNN***[FFF***()]=FFF***()+FFF***()+FFF***();
NNN*** Обфусцированная переменная
«Автоматом» данное преобразование НЕ делается. Все на откуп пользователя, исходя из соображений «быстродействия» и степени «защиты» кода
7. Публикую обработку в состоянии «как есть». В моем случае, свою задачу она решила успешно. Но ошибки, конечно есть 🙂
Функцию шифровки строки, с некоторыми изменениями использовал из публикации: //infostart.ru/public/95662/
«+» нет необходимости использовать внешние компоненты
Тестировалось: 1С:Предприятие 8.3 (8.3.10.2299).
Изменения версии 0.42 от 2017.11.04
2. При обработке функций/процедур с содержимым более 500 строк возникали ошибки
2. Корректное исключение строк с комментарием из текстов запросов.
3. В некоторых случаях «терялись» логические операции в конце строки- (например логическое И)
4. При пустом значении пароля генерировался «не корректный» код. Добавлена авто-генерация пароля.
Ваш браузер устарел, пожалуйста обновите ваш браузер пройдя по ссылке www.microsoft.com/download
Каждый из Вас сам решает, где ставить запятую. Те, кто ставит запятую после первого слова, могут посмотреть и оставить свои комментарии. Те же, кому приходилось сталкиваться с «хитрым» заказчиком, могут воспользоваться этим расширением.
Расширение для защиты внешних обработок. Несмотря на свой столь малый размер и количество кода, решает часть вопросов исполнения и защиты внешних обработок:
Теперь коротко о том, как это работает:
Логика открытия кодированной обработки:
Модуль формы обработки открыт. Ниже приводится только фрагмент позволяющий понять как происходит работа с закодированной обработкой:
Модуль менеджера объекта закодирован. Листинг этого модуля без алгоритма кодирования/декодирования предоставлен в полном объеме ниже:
Модуль объекта пустой, но так как поставка не разделяет типы модулей, он оказался тоже без текста.
Механизм защиты реализован в модуле обработки в связи с тем, что некоторые приложения работают в режиме совместимости версии 8.3.8 в котором нет возможности расширениями добавлять свои общие модули. Тестировалось на версии 8.3.10.2252 в обычном режиме работы и в режиме совместимости 8.3.8.
В данном расширении реализован только функционал работы с внешними обработками.
Востребована ли эта тема и нужно ли ее развивать?
Если тема будет интересна, то легким движением руки функционал расширяется для отчетов. А как максимальное развитие – расширение БСП для работы с кодированными обработками и отчетами.
Как вы видите функционирование кодера в данном расширении ограничено датой 31.12.2018.