Тема защиты интеллектуальной собственности в среде 1С является одной из самых сложных и обсуждаемых. Платформа изначально проектировалась как открытая система, поэтому штатных механизмов, гарантирующих стопроцентную защиту от реверс-инжиниринга, в ней не предусмотрено — для этой задачи есть инструментарий анализа структуры метаданных и отладки. Тем не менее, если мы сталкиваемся с недобросовестными клиентами, которые передают наши платные разработки (например, расширения) третьим лицам, мы можем внедрить комплекс мер, делающих взлом экономически нецелесообразным.
Давайте подробно разберем основные методы защиты расширений 1С от взлома и декомпиляции, начиная от самых простых до наиболее надежных.
Самый базовый инструмент, который предоставляет платформа 1С — это создание файла поставки или расширения с закрытыми модулями. При сохранении расширения в файл .cfe мы можем снять флажок включения исходных текстов.
В этом случае в файле остается только скомпилированный байт-код платформы. Однако, проанализируем уязвимости этого метода:
Таким образом, поставка без исходных текстов защитит вашу разработку от рядовых пользователей, но не станет преградой для слесаря-программиста 1С.
Если мы не можем полностью скрыть исходный код, давайте сделаем его абсолютно нечитаемым. Этот процесс называется обфускацией. Мы можем использовать специализированные скрипты или программы, которые обрабатывают наш код перед сборкой расширения.
Рассмотрим, что именно делает обфускатор:
Посмотрим на пример того, как может выглядеть часть обфусцированного кода:
Функция л1ф8щ3_к9(з_Парам1, з_Парам2)
Если Не Истина Тогда Возврат Ложь; КонецЕсли;
р_Рез = Неопределено;
// ... сотни строк нечитаемого текста ...
Возврат р_Рез;
КонецФункции
Такой подход заставит злоумышленника потратить на расшифровку больше времени (и денег), чем стоит разработка аналогичного функционала с нуля.
Если в вашем расширении есть уникальная и сложная математика, критичные алгоритмы расчета или обработки данных, вынесем их за пределы 1С. Разработаем внешнюю компоненту по технологии Native API.
Проанализируем этот подход подробнее:
.dll для Windows или .so для Linux.Важно: Декомпиляция машинного кода (С++) в исходный текст практически невозможна. Взломщик увидит лишь Ассемблер. Однако следует избегать написания компонент на платформе .NET (C#), так как IL-код дотнета декомпилируется в отлично читаемый исходный текст так же легко, как и сама 1С.
Самый надежный способ защитить код — вообще не отдавать его клиенту. Вынесем ключевые вычисления на собственный удаленный сервер.
Разберем логику работы:
В этом случае взламывать в 1С просто нечего. Украсть можно только саму форму обработки.
Если архитектура требует, чтобы весь код работал на стороне клиента, внедрим систему авторизации и проверки лицензий (так называемую "стучалку").
Проанализируем по шагам, как это реализовать:
ИНН и КПП организации из справочника "Организации", а также собирает ID процессора или материнской платы сервера.Посмотрим на базовый пример проверки привязки к ИНН внутри модуля:
Процедура ПроверитьЛицензию() Экспорт
ТекОрганизация = БухгалтерскийУчетПереопределяемый.ПолучитьОрганизациюПоУмолчанию();
Если ТекОрганизация.ИНН <> "1234567890" Тогда
ВызватьИсключение "Нарушение условий использования расширения!";
КонецЕсли;
КонецПроцедуры
Для большей хитрости блокировку можно сделать неявной. Например, при обнаружении нелегального использования расширение не выдает ошибку сразу, а начинает искажать результаты расчетов на 3-5% в случайном порядке. Взломщик не сразу поймет, что защита сработала.
Для тиражных решений настоятельно рекомендуется использовать готовые продукты:
Если вы хотите защитить свои наработки для 1С, вам придется комбинировать методы. Оберните ключевой функционал в HTTP-сервисы (SaaS) или вынесите в Native API на С++ — для этого подойдёт защищенная система управления внешними интеграциями 1С. Если это невозможно — применяйте жесткую обфускацию кода и внедряйте проверки ИНН организации-заказчика. Техническая сложность декомпиляции такого "фарша" отпугнет подавляющее большинство любителей бесплатного софта.