Описание:
Обфускатор является внешней обработкой. Запускается только в режиме управляемых форм, для чтения/записи файлов *.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.70 | - | 1500 р | *.epf, *.erf, *.cf | V8Unpack | ошибка формата потока | - |
Антидекомпилятор | 1.0.0.3 | + | 5 sm |
*.bin, image |
- | работает | - |
Обфускатор операционного кода 1с |
- | + | 5 sm | *.epf | возможно работает | - | |
Обфускатор байт-кода 1С | 1.5.4.1 | + | 10 sm | *.epf, *.erf, *.cf, *.cfe, *.cfu | Распаковщик / запаковщик файлов | работает | - |
Обфускатор | 1.0 | - | 7000 р | *.epf, *.erf, *.cf | v8cf | работает | - |
Нетленка: защита конфигураций 1С | 2 | - | 29500 р | *.epf, *.erf, *.cf, *.cfe | V8Unpack | работает | - |
Защита конфигураций | 3 | - | 17500 р | *.cf, *.cfe | конфигуратор | работает | HASP, Guardant, Codemeter |
Работа с контейнером 1С:
- Конфигуратор - работа с контейнером 1С (выгрузка/загрузка конфигурации, расширения конфигурации, внешних отчетов и обработок в/из XML).
- v8unpack - внешняя компонента для работы с контейнером 1С (epf, erf, cf, cfe). Компонента нужна для распаковки файлов из контейнера и запаковки их обратно.
- v8cf (список методов компоненты) - внешняя компонента для работы с контейнером 1С (epf, erf, cf). Сделана из плагина к TotalCommander'у. Компонента нужна для распаковки файлов из контейнера и запаковки их обратно. В отличие от v8unpack, работа идет не через файлы на диске, а напрямую.
- Распаковщик / запаковщик файлов - работа с контейнером 1С без использования внешних файлов, библиотек и компонентов.
Планы по развитию функционала:
Чтение/запись данных;Кодировка;Приоритет записи;- Обычные формы;
- Углубленная обфускация байт-кода 1с;
- Клиент-серверный вариант работы.
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.
- Добавлена возможность обфускации файлов.
- Добавлена возможность изменять тексты запароленных модулей.