Обфускатор является внешней обработкой. Запускается только в режиме управляемых форм. Обфускатор может обрабатывать файлы любых версий 1c 8.
Предисловие:
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.3.0 | 10 sm | *.epf, *.erf, *.cf, *.cfe, *.cfu | работает | - |
Обфускатор операционного кода 1с |
- | 5 sm | *.epf | возможно работает | - |
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:
- Реализовано смешанное шифрование констант.
- Перенесена форма выбора модулей в основную.