Обфускатор является внешней обработкой. Запускается только в режиме управляемых форм. Обфускатор может обрабатывать файлы любых версий 1c 8. Обработка протестирована на платформе 8.3.25.1394, однако конструктор "ГенераторСлучайныхЧисел" с изменённым алгоритмом будет корректно функционировать на версиях 8.3.22.1368+. Если заменить конструктор "ГенераторСлучайныхЧисел" на другой, то она будет работать начиная с версии 8.3.18+. Если также убрать асинхронность, то и на 8.3.10+.
Предисловие:
1С не является интерпретатором в чистом виде. Это означает, что 1С не исполняет исходные тексты модулей непосредственно. Для исполнения модулей 1С сначала производит компиляцию модуля в промежуточное представление, обычно называемое байт-кодом, а уже затем виртуальная машина 1С исполняет этот байт-код.
1С может хранить модули тремя способами:
- Исходный текст модуля открыт. Это обычный вид хранения модуля. Компиляция модуля происходит во время выполнения при первом обращении к модулю. Внутри контейнера модуль хранится как текстовый файл text, содержащий исходный код модуля.
- На модуль поставлен пароль. Компиляция происходит в момент сохранения модуля при редактировании. Внутри контейнера модуль хранится в виде двух файлов – text, содержащий исходный текст модуля, зашифрованный ключом, полученным из пароля, и image, содержащий скомпилированный образ модуля (байт-код). Ни пароль, ни ключ шифрования 1С не хранит, поэтому, не зная пароль, расшифровать исходный текст нельзя. Для выполнения 1С использует заранее скомпилированный байт-код из файла image.
- Поставка без исходных текстов. В этом случае исходный текст модуля отсутствует. В контейнере хранится только скомпилированный образ модуля image, который 1С использует при выполнении модуля. Открыть такой модуль на редактирование нельзя никак.
Назначение флажков и переключателей:
Обфускатор может делать несколько действий, за каждое из которых отвечает свой флажок или переключатель.
Переключатель "Выбор модификации":
- без изменения - выбрать все без изменения.
- минимальный - выбрать все минимальные.
- случайный - выбрать все случайные.
- максимальный - выбрать все максимальные.
Переключатель "Порядок операций":
- без изменения - оставить порядок операций в исходном виде без внесения изменений.
- случайный - случайный порядок операций.
Переключатель "Порядок констант":
- без изменения - оставить порядок констант в исходном виде без внесения изменений.
- случайный - случайный порядок констант.
Переключатель "Порядок переменных":
- без изменения - оставить порядок переменных в исходном виде без внесения изменений.
- случайный - случайный порядок переменных.
Переключатель "Порядок меток":
- без изменения - оставить порядок меток в исходном виде без внесения изменений.
- случайный - случайный порядок меток.
Переключатель "Порядок процедур":
- без изменения - оставить порядок процедур в исходном виде без внесения изменений.
- случайный - случайный порядок процедур.
Переключатель "Удаление конструкций":
- без изменения - ненужные конструкции не удаляются.
- частичное - частично удаляются ненужные конструкции.
- полное - полностью удаляются ненужные конструкции.
Переключатель "Шифрование констант":
- без изменения - константы не шифруются.
- простое - шифруются константы без вызова процедуры.
Переключатель "Шифрование имён переменных":
- без изменения - имена переменных не шифруются.
- полное - полностью шифруются имена переменных.
Переключатель "Шифрование имён меток":
- без изменения - имена меток не шифруются.
- полное - полностью шифруются имена меток.
Переключатель "Замена конструкций":
- без изменения - конструкции не заменяются.
- частичная - частично заменяются конструкции на аналогичные.
- полная - полностью заменяются конструкции на аналогичные.
Переключатель "Шифрование файлов модулей":
- без изменения - файлы не шифруются.
- частичное - частично шифруются файлы.
- полное - полностью шифруются файлы.
Переключатель "Запись файлов модулей":
- без изменения - файлы записываются в исходном виде без внесения изменений.
- произвольная - записываются файлы без разделителей или с разделителями строк.
Переключатель "Порядок блоков файлов модулей":
- без изменения - оставить порядок блоков файлов в исходном виде без внесения изменений.
- случайный - случайный порядок блоков файлов.
- циклический - повторяет последовательность блоков файлов.
Переключатель "Добавление мусора":
- без изменения - мусор не добавляет.
- случайное - добавляет случайный мусор.
Переключатель "Поставка модулей":
- без изменения - поставляются модули в исходном виде без внесения изменений.
Если был установлен пароль на тексты модулей, то оставляет возможность установки пароля на тексты модулей после обфускации байт-кода. При вводе корректного пароля приведет к расшифровке исходных текстов, но 1С при закрытии модуля заново скомпилирует модуль и перезапишет обфусцированный скомпилированный образ, т.е. обфускация слетит.
Если исходный текст модуля отсутствовал, то в контейнере будет хранится только скомпилированный образ модуля после обфускации байт-кода. - исходный текст модуля отсутствует - поставляются модули окна с надписью "Исходный текст модуля отсутствует".
- раздельный закрытый модуль - поставляются модули в отдельных файлах с предустановленным паролем "0" и готовым текстом.
- пустой закрытый модуль - поставляются новые модули без встроенных окон с надписью "Исходный текст модуля отсутствует" и полем для ввода пароля.
Флажок "Не создавать копию" - не создается копия обрабатываемого файла.
Флажок "Замер времени" - замеряет время выполнения кода.
Обрабатываемые файлы:
Обфускатор может обрабатывать файлы *.epf, *.erf, *.cf, *.cfe и *.cfu. Обработка происходит безопасным способом – создается копия обрабатываемого файла с добавкой «_обф» в имени файла, и вся работа идет уже с этой копией. Таким образом, при любом исходе работы обфускатора, исходный файл остается целым. Если нужно обрабатывать непосредственно исходный файл, то рекомендуется создавать резервную копию файла и поставить флажок "Не создавать копию". Обрабатываемый файл должен быть предварительно закрыт паролем прежде чем обрабатывать. Если модуль закрытой обработки будет изменен разработчиком, то ее нужно будет обрабатывать еще раз.
Цель: Затруднить для понимания байт-код, запутать и устранить логические связи в байт-коде.
Список публикаций, использованных при разработке:
Сравнение инструментов:
Инструмент | Версия | Цена (sm, руб) | Защита |
Запуск с установ-ленной защитой |
Системы лицензи-рования |
Защита конфигураций | 3 | 17500 р | *.cf, *.cfe | работает | HASP, Guardant, Codemeter |
Защита от декомпиляции модулей | 1.70 | 1500 р | *.epf, *.erf, *.cf | возможно работает | - |
Нетленка: защита конфигураций 1С | 2 | 49500 р | *.epf, *.erf, *.cf, *.cfe | работает | - |
Обфускатор байт-кода (этот) | 1.6.5.0 | 10 sm | *.epf, *.erf, *.cf, *.cfe, *.cfu | работает | - |
Обфускатор операционного кода 1с |
- | 5 sm | *.epf | возможно работает | - |
11.12.2024 - Версия 1.6.5.0:
- Добавлена новая замена конструкций.
- Теперь замена конструкций со списками выбора "без изменения", "частичная" и "полная".
- Переименован переключатель "Удаление номеров строк" на "Удаление конструкций".
24.11.2024 - Версия 1.6.4.0:
- Добавлен переключатель "Добавление мусора" со списками выбора "без изменения" и "случайное".
- Теперь переключатели "Создание дополнительных переходов" и "Создание дополнительных элементов" заменены на переключатель "Добавление мусора", который так же добавляет ещё больше ненужного мусора.
- Теперь порядок операций изменяется также на этапе инициализации модуля.
16.11.2024 - Версия 1.6.3.0:
- Теперь deflate распаковывается в памяти без временных файлов.
- Исправлена ошибка шифрования констант.
22.08.2024 - Версия 1.6.2.0:
- Добавлена возможность шифрования имён меток.
15.08.2024 - Версия 1.6.1.0:
- Добавлена возможность выбора модификации со списками выбора "без изменения", "минимальный", "случайный" и "максимальный".
- Теперь доступна кнопка "Открыть" для внешних отчётов.
- Изменён флажок "Изменить имена переменных" на переключатель "Шифрование имён переменных".
- Изменён флажок "Сгенерировать количество элементов" на переключатель "Создание дополнительных элементов".
07.08.2024 - Версия 1.6.0.0:
- Добавлен переключатель "Шифрование файла модуля" со списком выбора "полное".
- Закладка "Дополнительные настройки" переименована в "Настройки".
- Упразднена закладка "Структура файла".
- Упразднен переключатель "Поставка модулей" со списком выбора "постоянный неверный пароль".
- Упразднен переключатель "Запись файла модуля" со списками выбора "без разделителей" и "с разделителями".
- Убрана справочная информация.
17.11.2023 - Версия 1.5.4.1:
- Изменен флажок "Удалить номера строк" на переключатель "Удаление номеров строк".
01.10.2023 - Версия 1.5.3.1:
- Добавлена возможность заменить конструкции.
- Добавлено новое шифрование констант.
- Изменен флажок "Добавить переходы" на переключатель "Создание дополнительных переходов".
- Исправлена некорректная запаковка расширений.
04.09.2023 - Версия 1.5.2.1:
- Добавлено новое шифрование констант.
- Добавлена возможность изменить порядок переменных.
- Реализована произвольная запись файла модуля.
24.08.2023 - Версия 1.5.1.1:
- Реализовано смешанное шифрование констант.
- Перенесена форма выбора модулей в основную.