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

Публикация № 1677514 16.06.22

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

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

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

SadMood

Иногда становится очень грустно...

Обфускация стала модной

Обфускация - смешивание кода с говном до получения говнокода.

 © Валерий Агеев

Цель: затруднить просмотр, декомпиляцию и деобфускацию байт-кода.

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

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

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

Назначение полей:

Файл - в диалоге можно выбрать файл *.epf, *.erf, *.cf, *.cfe, *.cfu.

Кнопка "Распаковать" - распаковывает выбранный файл в каталог распаковки.

Кнопка "Открыть" - открывает выбранный файл.

Кнопка "Выбрать модули" - в появившейся форме можно выбрать, какие модули обрабатывать или разобрать.

Кнопка "Обработать" - обрабатывает все файлы image и создается копия обрабатываемого файла с добавкой «_obf» в имени файла. Обрабатываемый файл должен быть предварительно закрыт паролем прежде чем обрабатывать.

Кнопка "Разобрать" - разбирает файл image.

Флажок "Удалить номера строк" - удаляются оп-коды номеров строк.

Флажок "Добавить переходы" - добавляются условные и безусловные истинные и ложные переходы.

Кодировка констант:

  • без изменения - кодировка констант без изменения.
  • base64 - кодировка констант формата base64.

Порядок констант:

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

Порядок процедур:

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

Порядок разделов:

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

Запись файла image:

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

Поставка модулей:

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

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

При попытке прочитать / разобрать результирующий файл будут выданы ошибки.

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

 

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

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

Публикация Версия файла ОФ УФ Код открыт Автор Цена sm~руб Обрабаты-ваемый файл Работа с контейнерами 1С

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

Защита 
Защита обработок 1С от декомпиляции 1.0.0 нет да нет Administrator1c 1500 р *.epf, *.erf V8Unpack работает ни зкая
Защита от декомпиляции модулей 1.70 да да нет dimannazarov 1500 р *.epf, *.erf, *.cf V8Unpack ошибка формата потока средняя
Антидекомпилятор 1.0.0.3 нет да да скрыт 5 sm

*.bin, image

- работает средняя
Обфускатор
операционного
кода 1с
- нет да да MoiseevSN 3 sm *.epf

V8Unpack

вылет программы средняя
Обфускатор байт-кода 1С 1.3.6.1 нет да да zhokhovm 10 sm *.epf, *.erf, *.cf, *.cfe, *.cfu Распаковщик / запаковщик файлов работает средняя
Обфускатор 0.1.0.0 да нет нет awa 7000 р *.epf, *.erf, *.cf v8cf работает высокая

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

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

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

  • Чтение/запись данных;
  • Кодировка;
  • Углубленная обфускация байт-кода 1с;
  • Приоритет записи;
  • Работа в клиентском/серверном контексте;
  • Обычные формы.
 
Новое в версии 

23.03.2023 - Версия 1.3.6.1:

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

21.03.2023 - Версия 1.3.5.1:

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

18.03.2023 - Версия 1.3.4.1:

  • Поставка модулей "пустой модуль" переименована в "пароль всегда 0" и переделана.
  • Добавлена новая поставка модулей "модуль без исходного текста".
    Новая недокументированная возможность 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.
  • Добавлена возможность обфускации файлов.
  • Добавлена возможность изменять тексты запароленных модулей. 

Протестировано на платформе 8.3.22.1750.

P. S. Если модуль закрытой обработки будет изменен разработчиком, то ее нужно будет обрабатывать еще раз.

Архив

Наименование Файл Версия Размер
Обфускатор байт-кода 1С:

.epf 899,76Kb
0
.epf 1.0.9.5 899,76Kb Скачать
Обфускатор байт-кода 1С:

.epf 47,74Kb
0
.epf 1.1.0.7 47,74Kb Скачать
Обфускатор байт-кода 1С:

.epf 67,81Kb
39
.epf 1.2.5.6 67,81Kb 39 Скачать

Актуальный релиз

Наименование Файл Версия Размер
Обфускатор байт-кода 1С:

.epf 70,95Kb
0
.epf 1.3.6.1 70,95Kb Скачать

Специальные предложения

Автор запретил комментарии

См. также

Публикаций не найдено

Попробуйте расширить область поиска, проверьте поисковый запрос и повторите попытку.

Или закажите индивидуальную разработку вашего решения.

Создать заказ на разработку