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

05.03.24

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

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

Скачать файлы

Наименование Файл Версия Размер
Обфускатор байт-кода:
.epf 78,57Kb
38
.epf 1.5.4.1 78,57Kb 38 Скачать

Обфускатор является внешней обработкой. Запускается только в режиме управляемых форм, для чтения/записи файлов *.epf, *.erf, *.cf, *.cfe и *.cfu использует обработку "Распаковщик / запаковщик файлов". Обфускатор может обрабатывать файлы любых версий 1cv8. Работает только в файловом варианте с версии платформы 8.3.18 из-за асинхронных конструкций "Асинх" и "Ждать".

Предисловие:

1С не является интерпретатором в чистом виде. Это означает, что 1С не исполняет исходные тексты модулей непосредственно. Для исполнения модулей 1С сначала производит компиляцию модуля в промежуточное представление, обычно называемое байт-кодом, а уже затем виртуальная машина 1С исполняет этот байт-код.

1С может хранить модули тремя способами:

  • Исходный текст модуля открыт. Это обычный вид хранения модуля. Компиляция модуля происходит во время выполнения при первом обращении к модулю. Внутри контейнера модуль хранится как текстовый файл text, содержащий исходный код модуля.
  • На модуль поставлен пароль. Компиляция происходит в момент сохранения модуля при редактировании. Внутри контейнера модуль хранится в виде двух файлов – text, содержащий исходный текст модуля, зашифрованный ключом, полученным из пароля, и image, содержащий скомпилированный образ модуля (байт-код). Ни пароль, ни ключ шифрования 1С не хранит, поэтому, не зная пароль, расшифровать исходный текст нельзя. Для выполнения 1С использует заранее скомпилированный байт-код из файла image.
  • Поставка без исходных текстов. В этом случае исходный текст модуля отсутствует. В контейнере хранится только скомпилированный образ модуля image, который 1С использует при выполнении модуля. Открыть такой модуль на редактирование нельзя никак.

Назначение флажков и переключателей:

Обфускатор может делать несколько действий, за каждое из которых отвечает свой флажок/переключатель.

Флажок "Изменить имена переменных" - изменяются имена переменных.

Флажок "Сгенерировать количество элементов" - генерирует количество последующих элементов.

Переключатель "Порядок операций":

  • без изменения - оставить порядок операций в исходном виде без внесения изменений.
  • случайный - случайный порядок операций.

Переключатель "Порядок констант":

  • без изменения - оставить порядок констант в исходном виде без внесения изменений.
  • случайный - случайный порядок констант.

Переключатель "Порядок переменных":

  • без изменения - оставить порядок переменных в исходном виде без внесения изменений.
  • случайный - случайный порядок переменных.

Переключатель "Порядок меток":

  • без изменения - оставить порядок меток в исходном виде без внесения изменений.
  • случайный - случайный порядок меток.

Переключатель "Порядок процедур":

  • без изменения - оставить порядок процедур в исходном виде без внесения изменений.
  • случайный - случайный порядок процедур.

Переключатель "Удаление номеров строк":

  • без изменения - номера строк не удаляются.
  • частичное - частично удаляются номера строк.
  • полное - полностью удаляются номера строк.

Переключатель "Шифрование файла image":

  • без изменения - файлы image не шифруются.
  • частичное - шифруются файлы image частично.

Переключатель "Порядок блоков файла image":

  • без изменения - оставить порядок блоков файла image в исходном виде без внесения изменений.
  • случайный - случайный порядок блоков файла image.
  • циклический - повторяет последовательность блоков файла image.

Переключатель "Запись файла image":

  • без изменения - файлы image записываются в исходном виде без внесения изменений.
  • без разделителей - записываются файлы image без разделителей строк.
  • с разделителями - записываются файлы image с разделителями строк.
  • произвольная - записываются файлы image без разделителей или с разделителями строк.

Переключатель "Шифрование констант":

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

Переключатель "Создание дополнительных переходов":

  • без изменения - дополнительные переходы не создаются.
  • простое - создаются простые дополнительные переходы.

Переключатель "Замена конструкций":

  • без изменения - конструкции не заменяются.
  • простое - заменяются простые конструкции на аналогичные.

Переключатель "Поставка модулей":

  • без изменения - поставляются модули в исходном виде без внесения изменений.
    Если был установлен пароль на тексты модулей, то оставляет возможность установки пароля на тексты модулей после обфускации байт-кода. При вводе корректного пароля приведет к расшифровке исходных текстов, но 1С при закрытии модуля заново скомпилирует модуль и перезапишет обфусцированный скомпилированный образ, т.е. обфускация слетит.
    Если исходный текст модуля отсутствовал, то в контейнере будет хранится только скомпилированный образ модуля после обфускации байт-кода.
  • исходный текст модуля отсутствует - поставляются модули окна с надписью "Исходный текст модуля отсутствует".
  • постоянный неверный пароль - поставляются модули с паролем без расшифровки исходных текстов.
  • раздельный закрытый модуль - поставляются модули в отдельных файлах с предустановленным паролем "0" и готовым текстом.
  • пустой закрытый модуль - поставляются новые модули без встроенных окон с надписью "Исходный текст модуля отсутствует" и полем для ввода пароля.

Флажок "Не создавать копию" - не создается копия обрабатываемого файла.

Обрабатываемые файлы:

Обфускатор может обрабатывать файлы *.epf, *.erf, *.cf, *.cfe и *.cfu. Обработка происходит безопасным способом – создается копия обрабатываемого файла с добавкой «_обф» в имени файла, и вся работа идет уже с этой копией. Таким образом, при любом исходе работы обфускатора, исходный файл остается целым. Если нужно обрабатывать непосредственно исходный файл, то рекомендуется создавать резервную копию файла и поставить флажок "Не создавать копию". Обрабатываемый файл должен быть предварительно закрыт паролем прежде чем обрабатывать. Если модуль закрытой обработки будет изменен разработчиком, то ее нужно будет обрабатывать еще раз.

Цель: Затруднить для понимания байт-код, запутать и устранить логические связи в байт-коде.

При попытке прочитать / разобрать байт-код сторонними утилитами будут выданы ошибки (см. скриншоты ошибок). 

 
 Скриншоты ошибок

 

Список публикаций, использованных при разработке:

Сравнение обфускаторов:

Инструмент Версия файла Код открыт Цена sm~руб Защита (модули, файлы) Работа с контейне-ром 1С

Запуск с установ-ленной защитой

Системы лицензи-рования
Антидекомпилятор 1.0.0.3 + 1-3 sm *.bin, image - работает -
Защита конфигураций 3 - 17500 р *.cf, *.cfe конфигуратор работает HASP, Guardant, Codemeter
Защита от декомпиляции модулей 1.70 - 1500 р *.epf, *.erf, *.cf V8Unpack ошибка формата потока -
Нетленка: защита конфигураций 1С 2 - 45000 р *.epf, *.erf, *.cf, *.cfe V8Unpack работает -
Обфускатор 1.0 - 7000 р *.epf, *.erf, *.cf v8cf работает -
Обфускатор байт-кода (этот) 1.5.4.1 + 10 sm *.epf, *.erf, *.cf, *.cfe, *.cfu Распаковщик / запаковщик файлов работает -
Обфускатор
операционного
кода 1с
- + 3-5 sm *.epf

V8Unpack

возможно работает -

 

Работа с контейнером 1С:

  • Конфигуратор - среда разработки для работы с контейнером 1С (epf, erf, cf, cfe). Выгрузка файлов в xml-файлы и загрузка файлов из xml-файлов.
  • v8unpack - внешняя компонента для работы с контейнером 1С (epf, erf, cf, cfe). Компонента нужна для распаковки файлов из контейнера и запаковки их обратно.
  • v8cf (список методов компоненты) - внешняя компонента для работы с контейнером 1С (epf, erf, cf). Сделана из плагина к TotalCommander'у. Компонента нужна для распаковки файлов из контейнера и запаковки их обратно. В отличие от v8unpack, работа идет не через файлы на диске, а напрямую.
  • Распаковщик / запаковщик файлов - инструмент для работы с контейнером 1С (epf, erf, cf, cfe, cfu) без использования библиотек и компонент.

Планы по развитию функционала:

  • Чтение/запись данных;
  • Кодировка;
  • Приоритет записи;
  • Обычные формы;
  • Клиент-серверный вариант работы.
 
История версий: 

17.11.2023 - Версия 1.5.4.1:

  • Изменен флажок "Удалить номера строк" на переключатель "Удаление номеров строк".

01.10.2023 - Версия 1.5.3.1:

  • Добавлена возможность заменить конструкции.
  • Добавлено новое шифрование констант.
  • Изменен флажок "Добавить переходы" на переключатель "Создание дополнительных переходов".
  • Исправлена ошибка при открытии запакованного файла CFE конфигуратором.

04.09.2023 - Версия 1.5.2.1:

  • Добавлено новое шифрование констант.
  • Добавлена возможность изменить порядок переменных.
  • Реализована произвольная запись файла image.

24.08.2023 - Версия 1.5.1.1:

  • Реализовано смешанное шифрование констант.
  • Перенесена форма выбора модулей в основную.

11.07.2023 - Версия 1.4.6.1:

  • Полностью переписан "с нуля" парсер файла image.

16.06.2023 - Версия 1.4.5.1:

  • Добавлена возможность изменить порядок меток.
  • Исправлена ошибка с вылетом программы.

08.06.2023 - Версия 1.4.4.1:

  • Добавлена возможность изменить имена переменных.

01.06.2023 - Версия 1.4.3.1:

  • Добавлен вывод дерева в файл image.
  • Доработан парсер файла image в дерево.
  • Доработан переключатель "Порядок разделов".
  • Упразднен пункт "обратный" в переключателе "Порядок разделов".
  • Упразднен пункт "с разделителем разделов" в переключателе "Запись файла image".

25.05.2023 - Версия 1.4.2.1:

  • Добавлена возможность изменить порядок операций.
  • Добавлена справка.
  • Доработана генерация чисел блоков.
  • Доработано отображение дерева байт-кода 1с.
  • Переход на использование асинхронных методов.
  • Изменен подготовленный текст в переключателе "Поставка модулей" в пункте "пароль на модуль "0"".

10.05.2023 - Версия 1.4.1.1:

  • Добавлен флажок "Сгенерировать число блоков" в закладке "Основное".
  • Реализован парсер файла image в дерево.
  • Улучшено отображение дерева байт-кода 1с.
  • Скорректирован порядок записи меток процедуры.
  • Упразднен парсер файла image в массив.

02.05.2023 - Версия 1.3.9.1:

  • Добавлено отображение дерева байт-кода 1с.

17.04.2023 - Версия 1.3.8.1:

  • Добавлена возможность изменить порядок переменных модуля.
  • Поддержаны асинхронные методы "Асинх/Ждать".

25.03.2023 - Версия 1.3.7.1:

  • Добавлено новое шифрование констант.

23.03.2023 - Версия 1.3.6.1:

  • Добавлена возможность шифровать константы.

21.03.2023 - Версия 1.3.5.1:

  • Добавлена возможность изменить порядок процедур.
  • Добавлены флажки "Удалить номера строк" и "Добавить переходы" в закладке "Основное".
  • Упразднен флажок "Обфусцировать".

18.03.2023 - Версия 1.3.4.1:

  • Добавлена новая поставка модулей "модуль без исходного текста" с доступом к редактированию модуля.

10.03.2023 - Версия 1.3.1.1:

  • Добавлена возможность шифровать файл image.

10.01.2023 - Версия 1.2.5.6:

  • Добавлена возможность изменить порядок констант.
  • Добавлена возможность разложить результирующий файл image на составляющие.
  • Добавлен флажок "Отключить вывод информации" в закладке "Настройки".

10.12.2022 - Версия 1.2.4.5:

  • Добавлен новый пункт "Повторяющийся" в переключателе "Порядок разделов".

23.11.2022 - Версия 1.2.2.3:

  • Добавлена возможность изменить порядок записи разделов.

16.11.2022 - Версия 1.2.1.2:

  • Добавлена возможность разложить файл image на составляющие в форме "Выбрать модули".

08.11.2022 - Версия 1.2.0.1:

  • Добавлена возможность разложить файл image на составляющие.

24.10.2022 - Версия 1.1.0.7:

  • Добавлена возможность изменить запись файла image. 
  • Добавлен вывод времени (дни, часы, минуты, секунды).

21.10.2022 - Версия 1.1.0.6:

  • Добавлена обфускация команды BeginTry.
  • Добавлены кнопки "Распаковать" и "Открыть" у поля "Файл".
  • Исправлена проблема с долгой обработкой файла без флага "Обфусцировать".
  • Исправлена ошибка при запаковке файла *.cfe:
  • В процессе работы с объектом 'ЗаписьДанных' произошло изменение позиции нижележащего потока извне.

12.10.2022 - Версия 1.1.0.4:

  • Добавлена возможность удалять тексты запароленных модулей, открывать окно ввода пароля и создавать пустой закрытый модуль.

02.10.2022 - Версия 1.1.0.3:

  • Добавлена обфускация команды Goto.
  • Добавлена возможность открыть непосредственно файл *.epf (внешняя обработка) после обфускации байт-кода.

20.09.2022 - Версия 1.1.0.2:

  • Исправлена ошибка при формировании отчета.

16.09.2022 - Версия 1.1.0.1:

  • Добавлен новый распаковщик/запаковщик файлов *.epf, *.erf, *.cf, *.cfe, *.cfu. Написан полностью на 1с.
  • Упразднены все предыдущие распаковщики/запаковщики файлов.
    Причина:
    - в v8unpack нет запаковки файла cfu, ошибка хеша после запаковки файла cfe и т.д.;
    - в 1с (выгрузка/загрузка обработки/отчета в/из XML без добавления в командную строку "/F <base> /N <user> /P <password>") после запаковки файлов все ссылочные реквизиты становятся текстовыми.

05.07.2022 - Версия 1.0.9.5:

  • Добавлен распаковщик/упаковщик файлов V8Unpack viewer.
  • Добавлена возможность выбора файла cfu в формате файлов v8unpack.
  • Добавлен ключ -inflate в формате файлов v8unpack.

04.07.2022 - Версия 1.0.8.5:

  • Добавлены ключи -unpack, -undeflate, -deflate и -pack в формате файлов v8unpack.

03.07.2022 - Версия 1.0.7.5:

  • Добавлены параметры /DisableStartupMessages и /DisableStartupDialogs в формате 1С.
  • Исправлена ошибка:
  • При переоткрытии формы не сохраняются данные каталога распаковки в настройках.

01.07.2022 - Версия 1.0.6.4:

  • Добавлена возможность выбора формата 1С (bin, выгрузка/загрузка обработки/отчета в/из XML) / v8unpack (image, epf, erf, cf, cfe).

30.06.2022 - Версия 1.0.5.4:

  • Добавлен флажок "Не создавать копию".

29.06.2022 - Версия 1.0.4.4:

  • Добавлено автоматическое закрытие формы выбора запароленных модулей.
  • Скорректирована обфускация команды Unused.

25.06.2022 - Версия 1.0.3.3:

  • Добавлена возможность выбора файла cfe.
  • Добавлен распаковщик/упаковщик файлов v8unpack 3.0.43.28.

24.06.2022 - Версия 1.0.2.3:

  • Добавлена возможность выбора файла cf.
  • Добавлена возможность выбора модулей.

21.06.2022 - Версия 1.0.1.3:

  • Исправлена ошибка:
    При обфускации файла, в константах и параметрах с типом "Число", заменяются знаки с "." на ",".
    Пример кода: НДФЛ = Окр(ОблагаемаяБаза * 0.13);

20.06.2022 - Версия 1.0.1.2:

  • Добавлена возможность обфускации модуля для расширения конфигурации.
  • Исправлены ошибки при обфускации обработанного файла.

17.06.2022 - Версия 1.0.0.1:

  • Исправлена обратная сборка файлов из файла bin.

16.06.2022 - Версия 1.0.0.0:

  • Добавлена возможность выбора версии v8unpack.
  • Добавлена возможность выбора файла epf, erf, bin и image.
  • Добавлена возможность обфускации файлов.
  • Добавлена возможность изменять тексты запароленных модулей. 

 

обфускатор байт-код антидекомпилятор обфускация шифрование защита epf erf cf cfe cfu

См. также

Запрет глобального поиска в конфигурации

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

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

1 стартмани

09.02.2023    2224    9    aximo    4    

2

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

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

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

2 стартмани

30.01.2023    1659    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    2984    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    3832    7    vit59    2    

6

Распаковщик / запаковщик файлов

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Инструмент "Распаковщик / запаковщик файлов" написан полностью на чистом 1С. Реализация исключительно на работе с двоичными данными, буферами и потоками. Работает только в файловом варианте на платформе 8.3.9 и выше х64. Протестировано на платформе 8.3.23.1739.

10 стартмани

08.07.2022    16645    87    ZhokhovM    30    

59

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

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

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

2 стартмани

09.03.2022    5654    3    ge_ni    9    

2

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

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

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

1 стартмани

27.12.2021    4556    2    idm80    11    

9