Обфускатор является внешней обработкой. Обфускатор может обрабатывать файлы любых версий 1c 8. Обработка протестирована на 8.5.1.1150, однако конструктор "ГенераторСлучайныхЧисел" с изменённым алгоритмом будет корректно функционировать на версиях 8.3.22.1368+. Если заменить конструктор "ГенераторСлучайныхЧисел" на другой, то она будет работать начиная с версии 8.3.18+. Если также убрать асинхронность, то и на 8.3.10+.
Предисловие:
1С не является интерпретатором в чистом виде. Это означает, что 1С не исполняет исходные тексты модулей непосредственно. Для исполнения модулей 1С сначала производит компиляцию модуля в промежуточное представление, обычно называемое байт-кодом, а уже затем виртуальная машина 1С исполняет этот байт-код.
1С может хранить модули тремя способами:
- Исходный текст модуля открыт. Это обычный вид хранения модуля. Компиляция модуля происходит во время выполнения при первом обращении к модулю. Внутри контейнера модуль хранится как текстовый файл text, содержащий исходный код модуля.
- На модуль поставлен пароль. Компиляция происходит в момент сохранения модуля при редактировании. Внутри контейнера модуль хранится в виде двух файлов – text, содержащий исходный текст модуля, зашифрованный ключом, полученным из пароля, и image, содержащий скомпилированный образ модуля (байт-код). Ни пароль, ни ключ шифрования 1С не хранит, поэтому, не зная пароль, расшифровать исходный текст нельзя. Для выполнения 1С использует заранее скомпилированный байт-код из файла image.
- Поставка без исходных текстов. В этом случае исходный текст модуля отсутствует. В контейнере хранится только скомпилированный образ модуля image, который 1С использует при выполнении модуля. Открыть такой модуль на редактирование нельзя никак.
Назначение флажков и переключателей:
Обфускатор может делать несколько действий, за каждое из которых отвечает свой флажок или переключатель.
Флажок "Замер времени" - время выполнения кода.
Флажок "Не создавать копию" - не создается копия обрабатываемого файла.
Переключатель "Выбор модификации":
- без изменения - оставить все как есть и ничего не менять.
- минимальный - выставить все минимальные.
- максимальный - выставить все максимальные.
- ручной - выбираются вручную или генерируются случайным образом.
Переключатель "Шифрование констант":
- без изменения - константы не шифруются.
- простое - шифруются константы.
Переключатель "Переименование переменных":
- без изменения - переменные не переименовываются.
- случайное - переименовываются случайным образом переменные.
Переключатель "Переименование меток":
- без изменения - метки не переименовываются.
- случайное - переименовываются случайным образом метки.
Переключатель "Переименование процедур":
- без изменения - процедуры не переименовываются.
- случайное - переименовываются случайным образом процедуры.
Переключатель "Порядок констант":
- без изменения - оставить порядок констант в исходном виде без внесения изменений.
- случайный - случайный порядок констант.
Переключатель "Порядок переменных":
- без изменения - оставить порядок переменных в исходном виде без внесения изменений.
- случайный - случайный порядок переменных.
Переключатель "Порядок меток":
- без изменения - оставить порядок меток в исходном виде без внесения изменений.
- случайный - случайный порядок меток.
Переключатель "Порядок процедур":
- без изменения - оставить порядок процедур в исходном виде без внесения изменений.
- случайный - случайный порядок процедур.
Переключатель "Порядок операций":
- без изменения - оставить порядок операций в исходном виде без внесения изменений.
- случайный - случайный порядок операций.
Переключатель "Удаление конструкций":
- без изменения - ненужные конструкции не удаляются.
- частичное - частично удаляются ненужные конструкции.
- полное - полностью удаляются ненужные конструкции.
Переключатель "Замена конструкций":
- без изменения - некоторые конструкции не заменяются.
- частичная - частично заменяются некоторые конструкции на аналогичные.
- полная - полностью заменяются некоторые конструкции на аналогичные.
Переключатель "Добавление мусора":
- без изменения - мусор не добавляет.
- случайное - добавляется случайным образом мусор.
Переключатель "Шифрование файлов модулей":
- без изменения - файлы не шифруются.
- частичное - частично шифруются файлы.
- полное - полностью шифруются файлы.
Переключатель "Запись файлов модулей":
- без изменения - файлы записываются в исходном виде без внесения изменений.
- произвольная - записываются файлы без разделителей или с разделителями строк.
Переключатель "Порядок блоков файлов модулей":
- без изменения - оставить порядок блоков файлов в исходном виде без внесения изменений.
- случайный - случайный порядок блоков файлов.
- цикличный - повторяет последовательность блоков файлов.
Переключатель "Поставка модулей":
- без изменения - поставляются модули в исходном виде без внесения изменений.
Если был установлен пароль на тексты модулей, то оставляет возможность установки пароля на тексты модулей после обфускации байт-кода. При вводе корректного пароля приведет к расшифровке исходных текстов, но 1С при закрытии модуля заново скомпилирует модуль и перезапишет обфусцированный скомпилированный образ, т.е. обфускация слетит.
Если исходный текст модуля отсутствовал, то в контейнере будет хранится только скомпилированный образ модуля после обфускации байт-кода. - вариант 1 - поставляются без исходных текстов модулей.
- вариант 2 - поставляются без исходных текстов модулей (без надписей).
Обрабатываемые файлы:
Обфускатор может обрабатывать файлы *.epf, *.erf, *.cf, *.cfe и *.cfu. Обработка происходит безопасным способом – создается копия обрабатываемого файла с добавкой «_обф» в имени файла, и вся работа идет уже с этой копией. Таким образом, при любом исходе работы обфускатора, исходный файл остается целым. Если нужно обрабатывать непосредственно исходный файл, то рекомендуется создавать резервную копию файла и поставить флажок "Не создавать копию". Обрабатываемый файл должен быть предварительно закрыт паролем прежде чем обрабатывать. Если модуль закрытой обработки будет изменен разработчиком, то ее нужно будет обрабатывать еще раз.
Цель: Затруднить для понимания байт-код, запутать и устранить логические связи в байт-коде.
Список публикаций, использованных при разработке:
Сравнение инструментов:
| Инструмент | Защита файлов | Системы лицензи-рования |
| Защита конфигураций | *.cf, *.cfe | HASP, Guardant, Codemeter |
| Защита от декомпиляции модулей | *.epf, *.erf, *.cf | - |
| Нетленка: защита конфигураций 1С | *.epf, *.erf, *.cf, *.cfe | - |
| Обфускатор байт-кода (этот) | *.epf, *.erf, *.cf, *.cfe, *.cfu | - |
| Обфускатор операционного кода 1с |
*.epf | - |
1.7.4
Исправлена ошибка при вызове метода контекста (Сдвинуть).
1.7.3
Теперь поддерживаются 2 формы: "Версия 8.5" и "Такси".
Проведена небольшая оптимизация кода и формы.
1.7.2
Сведения о внешней обработке перенесены в заголовок формы.
Выбор модификации "Случайный" переименован в "Ручной".
Проведена небольшая оптимизация кода:
- Передача константы/значения напрямую без промежуточных переменных.
- Устаревшие конструкторы "ЧтениеZipФайла" и "ЗаписьZipФайла" заменены на новые.
- Устаревшие методы "Base64Значение" и "Base64Строка" заменены на новые.
- Устаревшее свойство "ЭтаФорма" заменено на новое.
Устранена проблема с записью многострочных строк в файл.
1.7.1
Больше нового мусора.
1.7.0
Добавлена возможность шифрования имён процедур.
1.6.5
Добавлена новая замена конструкций.
1.6.4
Добавлен переключатель, позволяющий добавить случайным образом мусор.
Теперь порядок операций изменяется также на этапе инициализации модуля.
1.6.3
Теперь deflate распаковывается в памяти без временных файлов.
Исправлена ошибка шифрования констант.
1.6.2
Добавлена возможность шифрования имён меток.
1.6.1
Добавлена возможность выбора модификации.
Теперь доступна кнопка "Открыть" для внешних отчётов.
1.6.0
Добавлен переключатель "Шифрование файла модуля" со списком выбора "полное".
Закладка "Дополнительные настройки" переименована в "Настройки".
Упразднена закладка "Структура файла".
Упразднен переключатель "Поставка модулей" со списком выбора "постоянный неверный пароль".
Упразднен переключатель "Запись файла модуля" со списками выбора "без разделителей" и "с разделителями".
Вступайте в нашу телеграмм-группу Инфостарт