1с исходный текст модуля отсутствует как открыть

Обновлено: 06.07.2024

Каждый из Вас сам решает, где ставить запятую. Те, кто ставит запятую после первого слова, могут посмотреть и оставить свои комментарии. Те же, кому приходилось сталкиваться с "хитрым" заказчиком, могут воспользоваться этим расширением.

Расширение для защиты внешних обработок. Несмотря на свой столь малый размер и количество кода, решает часть вопросов исполнения и защиты внешних обработок:

  1. Обработка, передаваемая заказчику, закодирована;
  2. Кодер/Декодер закодирован (обфусцирован, байт код защищен, тексты удалены);
  3. Исходный текст обработки при выполнении не изменен (что позволяет быстро идентифицировать ошибки);

Теперь коротко о том, как это работает:

  1. Необходимо установить обработку в любую конфигурацию в режиме управляемого приложения, интерфейс управляемых форм (если проект будет развиваться, будут и обычные формы);
  2. Если считаете необходимым, настройте безопасный режим и защиту от опасных действий (если такой необходимости нет, отключите их);
  3. Используя обработку «МиниБлок» включенную расширение закодируйте Вашу обработку (в архиве есть тестовая обработка);
  4. Используя обработку «МиниБлок» включенную расширение откройте Вашу закодированную обработку;

Логика открытия кодированной обработки:

Модуль формы обработки открыт. Ниже приводится только фрагмент позволяющий понять как происходит работа с закодированной обработкой:

Модуль менеджера объекта закодирован. Листинг этого модуля без алгоритма кодирования/декодирования предоставлен в полном объеме ниже:

Модуль объекта пустой, но так как поставка не разделяет типы модулей, он оказался тоже без текста.

Механизм защиты реализован в модуле обработки в связи с тем, что некоторые приложения работают в режиме совместимости версии 8.3.8 в котором нет возможности расширениями добавлять свои общие модули. Тестировалось на версии 8.3.10.2252 в обычном режиме работы и в режиме совместимости 8.3.8.

В данном расширении реализован только функционал работы с внешними обработками.

Востребована ли эта тема и нужно ли ее развивать?

Если тема будет интересна, то легким движением руки функционал расширяется для отчетов. А как максимальное развитие – расширение БСП для работы с кодированными обработками и отчетами.

Как вы видите функционирование кодера в данном расширении ограничено датой 31.12.2018.

Наверняка каждый разработчик заботится о том, чтобы его программы были защищены от нелегального распространения. Особенно если эта разработка – коммерческий, тиражируемый продукт.

Создатели системы 1С: Предприятие 8 позаботились о защите кода. К сожалению, пароль на доступ можно установить только на модули объектов, общие модули, модули обработок и отчетов. В том числе и внешних. Но и этого немало, так как можно значимые процедуры и функции разместить в модуле и потом к ним обращаться.

В данной статье я хочу разобраться, как установить защиту и снять её, если Вы забыли пароль.

Установка защиты на модуль 1C

установка пароля на модуль

Программа меня тут же предупредила о том, что нельзя защитить модуль, имеющий директивы препроцессора:

вопрос

Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>

Что же, посмотрим, во что это выльется. Устанавливаем пароль.


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

Вывод однозначный: не все модули можно защитить. Однако ничего Вам не мешает вынести функции и процедуры с директивами препроцессора в отдельный модуль.

Осталось проверить обработки. Возьмем для интереса внешнюю. Защита прошла без проблем.

Проверка надежности защиты с помощью декомилятора модулей 1С


выполнение обработки

Пробуем открыть модуль в конфигураторе, и он прекрасно открывается.

На форумах пишут, что иногда нужно запускать 1С от имени администратора, если выходит ошибка.

Теперь осталось проверить, как декомпилятор справится с общими модулями. Сохраняем конфигурацию в файл.

Выбираем в обработке:

выбор конфигурации для декомпилирования


Загружаем конфигурацию из файла и проверяем защиту. Защита полностью снята.

Данный материал предоставлен только в ознакомительных целях с целью обзора механизма защиты платформы 1С. Запрещено использовать данный материал для получения доступа к защищенным авторским правом разработкам.

Для тех, кто "не в курсе", для чего используется обфускация:

Обфускация помогает в ситуации, когда сложному клиенту необходимо передать «Полнофункциональную разработку» с некоторыми ограничениями (до момента оплаты, например):

Конечно, 100% защиту даст только механизм внешних компонент 1С. Но трудоемкость обфускации минимальна по отношению к созданию внешней компоненты (достаточно обфусцировать несколько ключевых функций). После оплаты восстанавливаем исходный модуль, сопровождение идет в штатном режиме. Трудоемкость восстановления исходных модулей в ручном режиме на основании обфусцированных сопоставима по трудоемкости с разработкой аналогичных.




ПРИМЕР
Исходный код:



Результат:
Обфускация — имя переменной случайное число + шифрование строк



или
Обфускация — имя переменной УИД + шифрование строк

1.Обфускация модуля/модуля формы/функции – приложения по заданным параметрам. Обфусцируются переменные:
- описанные в конструкции переменные
- описанные как параметры функции/процедуры
- анализ контекста выполнения НЕ выполняется
2. Реализована разбивка/шифрование строк по заданным параметрам.
3. При шифровании строк «По умолчанию» функция возврата пароля шифрования «прячется» в обрабатываемом модуле. Ее можно заменить своей функцией, возвращающей аппаратно-зависимый пароль (метка диска, имя машины, наличие сетевого адреса и все, что подскажет Ваша фантазия), тем самым исключить хранение пароля в модуле, реализовать простейшую защиту от несанкционированного использования защищенного модуля.
Соответственно без пароля/неправильном пароле функционал модуля будет недоступен/потерян (в случае шифрования строк).

Порядок работы:
1. В поле «Текст модуля исходный» копируем преобразуемый модуль
2. На вкладке «Параметры шифрования» определяем параметры шифрования строк, при необходимости свою функцию получения пароля
3. Нажимаем кнопку «Обработать»
4. Забираем обфусцированный модуль, заменяем «исходный».


Особенности/ограничения:

1. Обфусцированный модуль в режиме шифрования строк/разбивки может выполняться МЕДЛЕННЕЙ исходного в НЕСКОЛЬКО РАЗ, если зашифрованные строки находятся внутри циклов. ( время обработки тестового модуля обработкой «обфускации» увеличилось примерно в 2-3 раза, по отношению к «чистому» коду)


По быстродействию хочу поставить акцент:
Вызов функции получения пароля происходит при развертывании каждой части шифрованной строки.
Как вариант - строки минимально "разбивать" на "крупные". Если это модуль формы, мы можем значительно ускорить выполнение кода, определив пароль один раз при инициализации модуля. Хранить в переменной модуля/реквизите формы, возвращая эту переменную при вызове функции. Это будет быстрее, чем вычисление пароля каждый раз (или используя другие варианты оптимизации кэширования повторного использования значений и т.д).
По умолчанию, это формирование строки из кодов символов, пароля, указанного при обфускации: Символ(КодN1)+Символ(КодN2).
Эта функция заменяемая. Как вариант, указываем функцию получения значения пароля из модуля с «Повторно используемыми значениями».

По умолчанию, новый модуль генерируется универсально. Вычисление пароля происходит при КАЖДОМ вызове расшифровки строки.
Поскольку при обфускации нет возможности автоматически определить, что обрабатываем — модуль формы/модуль приложения, то пока этот нюанс обрабатываем самостоятельно. Правка минимальна.

2. При установке режима шифрования строк разбиваются/шифруются ВСЕ строковые переменные модуля.
3. Имена функций НЕ обрабатываются.(если не указано явное переименование функций)
4. Перенос директив препроцессора, обработка областей модуля НЕ ТЕСТИРОВАЛАСЬ. Вероятно есть ошибки переноса.

5. Переменные имеющие имена совпадающие с функциями глобального контекста корректно не обрабатываются. (например КодСимвола, Символ . и т.д.)

6. Подготовка кода.

Может для кого-то не очевидные моменты, связанные с шифровкой строк.

Код вида : ЭтаФорма.Элементы.ИмяЭлемента.Свойство=НекоеЗначение обработка оставит "как есть"

но, если обращение к реквизитам\свойствам использовать строки: переменнаяЭтаФорма["Элементы"]["ИмяЭлемента"]["Свойство"]=переменная

будет преобразован в: NNN***[FFF***()][FFF***()][FFF***()]=NNN****

будет преобразован в: NNN***[FFF***()]=FFF***()+FFF***()+FFF***();

FFF***() - функция содержащая шифрованную часть строки, согласно заданным параметрам

NNN*** Обфусцированная переменная

"Автоматом" данное преобразование НЕ делается. Все на откуп пользователя, исходя из соображений "быстродействия" и степени "защиты" кода

7. Публикую обработку в состоянии "как есть". В моем случае, свою задачу она решила успешно. Но ошибки, конечно есть :)

"+" нет необходимости использовать внешние компоненты

Тестировалось: 1С:Предприятие 8.3 (8.3.10.2299).

Изменения версии 0.42 от 2017.11.04

1. Оптимизировано быстродействие .

2. При обработке функций/процедур с содержимым более 500 строк возникали ошибки

2. Корректное исключение строк с комментарием из текстов запросов.

3. В некоторых случаях "терялись" логические операции в конце строки- (например логическое И)

4. При пустом значении пароля генерировался "не корректный" код. Добавлена авто-генерация пароля.

5. В некоторых случаях, при генерации кода операторы "<>", ">=", "<=" разбивались по строкам

6. Исправлены правила переноса инструкций препроцессора

7. Добавлено переименование функций.

Изменения версии 0.47 от 2017.12.10

- в некоторых случаях некоррекно обрабатывались определения "предопределенных" строковых параметров функций/процедур. Пример: Функция Ф(Парам1="111",Парам2="222")

Изменения версии 0.49 от 2017.12.19

- Некорректно обрабатывались предопределенные параметры имеющие значения '0000000', НЕОПРЕДЕЛЕНО. Пример: Функция Ф(Дата1='00010101',Парам2=неопределено)

- Добавлена возможность исключения команд препроцессора - при генерации кода, иначе при генерации кода модулей объектов возникали синтаксические ошибки, поскольку функции содержащие "шифрованные строки" объявлялись с диррективой препроцессора &НаКлиентеНаСервереБезКонтекста

Изменения версии 0.52 от 2019.04.08

- В некоторых случаях не корректно проводилось переименование/подмена функций. В результате чего, в режиме "переименования функций" результирующий код получался "с ошибками".

- Из предопределенных строковых параметров удалялись пробелы. Пример: Функция ИмяФункции(Значение="1 2 3 4 5") Преобразовывалось в ИмяФункции(Значение="12345")

- оптимизирован механизм переноса команд препроцессора / определение областей.

Читайте также: