Обфускация кода 1С

08.04.19

Разработка - Защита ПО и шифрование

Обфускация кода 1С как вариант защиты кода.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
ОБФ_7_052_201904_V052.erf
.erf 1,23Mb
131
131 Скачать (10 SM) Купить за 4 550 руб.
ОБФ_7_тест_050.erf
.erf 1,22Mb
28
28 Скачать (10 SM) Купить за 4 550 руб.
ОБФ_7_тест_043.erf
.erf 1,22Mb
6
6 Скачать (10 SM) Купить за 4 550 руб.

Для тех, кто "не в курсе", для чего используется обфускация:

Обфускация помогает в ситуации, когда сложному клиенту необходимо передать «Полнофункциональную разработку» с некоторыми ограничениями (до момента оплаты, например):

- у клиента не должно быть возможности править модуль;
- затруднено сопровождение/изменение/тиражирование;
- легко спрятать в модуле любые функции ограничения по сроку, среде исполнения, осуществить простую привязку к «железу»;
-  должен оставаться стимул оплатить работу.
 

Конечно, 100% защиту даст только механизм внешних компонент 1С. Но трудоемкость обфускации минимальна по отношению к созданию внешней компоненты (достаточно обфусцировать несколько ключевых функций). После оплаты восстанавливаем исходный модуль, сопровождение идет в штатном режиме.  Трудоемкость восстановления исходных модулей в ручном режиме на основании обфусцированных сопоставима по трудоемкости с разработкой аналогичных.

Форма обработки:

 


ПРИМЕР 
Исходный код:



 Результат:
Обфускация — имя переменной случайное число + шифрование строк



  или
Обфускация — имя переменной УИД + шифрование строк



Возможности обработки:

1.Обфускация модуля/модуля формы/функции – приложения по заданным параметрам. Обфусцируются переменные:
- описанные в конструкции переменные
- описанные как параметры функции/процедуры
- анализ контекста выполнения НЕ выполняется
2. Реализована разбивка/шифрование строк по заданным параметрам.
3. При шифровании строк «По умолчанию» функция возврата пароля шифрования «прячется» в обрабатываемом модуле. Ее можно заменить своей функцией, возвращающей аппаратно-зависимый пароль (метка диска, имя машины, наличие сетевого адреса и все, что подскажет Ваша фантазия), тем самым исключить хранение пароля в модуле, реализовать простейшую защиту от несанкционированного использования защищенного модуля.
Соответственно без пароля/неправильном пароле функционал модуля будет недоступен/потерян (в случае шифрования строк).
 

Порядок работы:
1. В поле «Текст модуля исходный» копируем преобразуемый модуль
2. На вкладке «Параметры шифрования» определяем параметры шифрования строк, при необходимости свою функцию получения пароля
3. Нажимаем кнопку «Обработать»
4. Забираем обфусцированный модуль, заменяем «исходный». 


Особенности/ограничения:

1. Обфусцированный модуль в режиме шифрования строк/разбивки может выполняться МЕДЛЕННЕЙ исходного в НЕСКОЛЬКО РАЗ, если зашифрованные строки находятся внутри циклов. ( время обработки тестового модуля обработкой «обфускации» увеличилось примерно в 2-3 раза, по отношению к «чистому» коду)


По быстродействию хочу поставить акцент:
Вызов функции получения пароля происходит при развертывании каждой части шифрованной строки.
Как вариант - строки  минимально  "разбивать" на "крупные". Если это модуль формы, мы можем значительно ускорить выполнение кода, определив пароль один раз при инициализации модуля. Хранить в переменной модуля/реквизите формы, возвращая эту переменную при вызове функции. Это будет  быстрее, чем вычисление пароля каждый раз (или используя другие варианты  оптимизации кэширования повторного использования значений и т.д).
По умолчанию, это формирование строки из кодов символов, пароля, указанного при обфускации:  Символ(КодN1)+Символ(КодN2).
Эта функция заменяемая. Как вариант, указываем функцию получения значения пароля из модуля  с «Повторно используемыми значениями».

По умолчанию, новый модуль генерируется универсально. Вычисление пароля происходит при КАЖДОМ вызове расшифровки строки. 
Поскольку при обфускации нет возможности автоматически определить, что обрабатываем — модуль формы/модуль приложения, то пока этот нюанс обрабатываем самостоятельно. Правка минимальна.

2. При установке режима шифрования строк разбиваются/шифруются ВСЕ строковые переменные модуля.
3. Имена функций НЕ обрабатываются.(если не указано явное переименование функций)
4. Перенос директив препроцессора, обработка областей модуля НЕ ТЕСТИРОВАЛАСЬ. Вероятно есть ошибки переноса.

5. Переменные имеющие имена совпадающие с функциями глобального контекста корректно не обрабатываются. (например КодСимвола, Символ ...и т.д.)

6. Подготовка кода.

Может для кого-то не очевидные моменты, связанные с шифровкой строк.

 Код вида : ЭтаФорма.Элементы.ИмяЭлемента.Свойство=НекоеЗначение  обработка оставит "как есть"

но, если обращение к реквизитам\свойствам использовать строки: переменнаяЭтаФорма["Элементы"]["ИмяЭлемента"]["Свойство"]=переменная

будет преобразован в: NNN***[FFF***()][FFF***()][FFF***()]=NNN****

Аналогично,

код: ПеременнаяЗапроса["Текст"]="ТекстЗапроса"

будет преобразован в: NNN***[FFF***()]=FFF***()+FFF***()+FFF***();

где:

FFF***() - функция содержащая шифрованную часть строки, согласно заданным параметрам

NNN***  Обфусцированная переменная

"Автоматом" данное преобразование НЕ делается. Все на откуп пользователя, исходя из соображений "быстродействия" и степени "защиты" кода

7. Публикую обработку в состоянии "как есть". В моем случае, свою задачу она решила успешно. Но ошибки, конечно есть :)

 

Функцию шифровки строки, с некоторыми изменениями использовал из публикации: //infostart.ru/public/95662/

"-" быстродействие

"+" нет необходимости использовать внешние компоненты

 

Тестировалось: 1С:Предприятие 8.3 (8.3.10.2299).

Изменения версии 0.42 от 2017.11.04

1. Оптимизировано быстродействие .

Исправлены ошибки:

2. При обработке функций/процедур с содержимым более 500 строк возникали ошибки

2. Корректное исключение  строк с комментарием  из текстов запросов.

3. В некоторых случаях "терялись" логические операции в конце строки- (например логическое И)

4. При пустом значении пароля генерировался "не корректный"  код. Добавлена авто-генерация пароля.

5. В некоторых случаях, при генерации кода операторы  "<>", ">=", "<="  разбивались по строкам

6. Исправлены правила переноса инструкций препроцессора

7. Добавлено переименование функций.

Изменения версии 0.47 от 2017.12.10

 Исправлены ошибки

- в некоторых случаях некоррекно обрабатывались определения "предопределенных" строковых параметров  функций/процедур. Пример: Функция Ф(Парам1="111",Парам2="222")      

Изменения версии 0.49 от 2017.12.19

Исправлены ошибки

- Некорректно обрабатывались предопределенные параметры имеющие значения  '0000000', НЕОПРЕДЕЛЕНО. Пример: Функция Ф(Дата1='00010101',Парам2=неопределено) 

- Добавлена возможность исключения команд препроцессора - при генерации кода, иначе при генерации кода модулей объектов возникали синтаксические ошибки, поскольку функции содержащие "шифрованные строки" объявлялись с диррективой препроцессора &НаКлиентеНаСервереБезКонтекста

- оптимизировано быстродействие

Изменения версии 0.52 от 2019.04.08

Исправлены ошибки

- В некоторых случаях не корректно проводилось переименование/подмена  функций. В результате чего, в режиме "переименования функций" результирующий код получался "с ошибками".

- Из предопределенных строковых параметров удалялись пробелы.  Пример: Функция ИмяФункции(Значение="1 2 3 4 5") Преобразовывалось в ИмяФункции(Значение="12345")

- оптимизирован механизм переноса команд препроцессора / определение областей.

- оптимизировано быстродействие

 

Обфускация кода . Защита защита модулей

См. также

Защита ПО и шифрование Программист Платформа 1С v8.3 Бесплатно (free)

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

30.12.2024    5030    artemusII    17    

10

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

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

1 стартмани

09.02.2023    2930    12    aximo    5    

2

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

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

2 стартмани

30.01.2023    2249    2    olevlasam    3    

3

Защита ПО и шифрование Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Универсальный синтаксический анализатор ASN.1, который может декодировать любую допустимую структуру ASN.1 DER или BER, независимо от того, закодирована ли она в кодировке Base64 (распознаются необработанные base64, защита PEM и begin-base64) или в шестнадцатеричном кодировании.

1 стартмани

04.12.2022    3721    17    keyn5565`    0    

15

Защита ПО и шифрование Программист Платформа 1С v8.3 Абонемент ($m)

Демонстрация возможностей шифрования строки на основе мастер-пароля в 1С Предприятие 8.3.19. AES без zip файла, RSA, PKDF2. (c использованием библиотеки С# через com).

2 стартмани

31.08.2022    4648    9    vit59    2    

6

Защита ПО и шифрование Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Обработка, позволяющая запутывать и шифровать байт-код, поставлять модули без исходных текстов и т.д. Работает только в файловом варианте с версии платформы 8.3.22.1368 из-за конструктора ГенераторСлучайныхЧисел, поскольку алгоритм был изменён.

10 стартмани

16.06.2022    13245    111    ZhokhovM    12    

46

Защита ПО и шифрование Программист Платформа 1С v7.7 Платформа 1С v8.3 Абонемент ($m)

Как уберечь конструкторскую документацию от воровства конкурентами? Недавно столкнулся с этой проблемой. Заказчик серьёзно обеспокоен утечкой информации о конструкторских разработках в адрес конкурентов, за счет подкупа исполнителей, занимающихся производством по конструкторской документации, операторов технологического оборудования и обрабатывающих центров по изготовлению деталей и сборочных единиц.

2 стартмани

09.03.2022    6282    4    ge_ni    9    

2