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

08.04.19

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

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

Скачать исходный код

Наименование Файл Версия Размер
ОБФ_7_052_201904_V052.erf
.erf 1,23Mb
112
.erf 1,23Mb 112 Скачать
ОБФ_7_тест_050.erf
.erf 1,22Mb
27
.erf 1,22Mb 27 Скачать
ОБФ_7_тест_043.erf
.erf 1,22Mb
5
.erf 1,22Mb 5 Скачать

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

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

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

Конечно, 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 1С:Бухгалтерия 3.0 Абонемент ($m)

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

1 стартмани

09.02.2023    2253    9    aximo    4    

2

Как защитить pdf файл

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

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

2 стартмани

30.01.2023    1706    1    olevlasam    3    

3

Универсальный синтаксический анализатор ASN.1 для декодирования .key, .cer, .der, .p7m, .p7s, .crt, .pem

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

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

1 стартмани

04.12.2022    3048    12    keyn5565`    0    

13

Шифрование строки на основе мастер-пароля в 1С Предприятие 8.3.19

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

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

2 стартмани

31.08.2022    3882    7    vit59    2    

6

Обфускатор байт-кода

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

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

10 стартмани

16.06.2022    10518    82    ZhokhovM    12    

41

Как уберечь конструкторскую документацию от воровства конкурентами?

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

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

2 стартмани

09.03.2022    5704    3    ge_ni    9    

2

Защита конфигураций, обработок, расширений 1С онлайн, управление версиями

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

Система построена на веб платформе, все управление происходит на сайте в личном кабинете пользователя.

1 стартмани

27.12.2021    4610    2    idm80    11    

9