"Открыть нельзя защищать!" - Где поставить запятую?

Публикация № 787115

Программирование - Защита и шифрование

Защита кода защита обработок защита обработки

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

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

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

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

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

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

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

  1. Загружается кодированный файл обработки в виде двоичных данных;
  2. В модуле обработки файл декодируется и сразу же подключается к менеджеру внешних обработок;
  3. Далее Вы можете открыть форму зарегистрированной обработки или получить новый объект обработки;

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

&НаКлиенте
Процедура ОткрытьКодированныйФайл(Команда)
  НачатьПомещениеФайла(Новый ОписаниеОповещения("ВыполнитьЗагрузку",ЭтаФорма),,Объект.ФайлРезультат,Ложь,УникальныйИдентификатор); 
КонецПроцедуры

&НаКлиенте
Процедура ВыполнитьЗагрузку(Результат,Адрес,ВыбранноеИмяФайла,ДополнительныеПараметры) Экспорт 
  Если Не Результат Тогда
    Возврат;
  КонецЕсли;
  воИмя = ЗагрузитьНаСервере(Адрес);                // Загружаем кодированную обработку
  ОткрытьФорму("ВнешняяОбработка."+воИмя+".Форма"); // Открываем форму внешней обработки
  Сообщить("Форма внешнего объекта <"+воИмя+"> открыта.");
КонецПроцедуры

&НаСервере
Функция ЗагрузитьНаСервере(Знач Адрес)
  ДвоичныеДанные = ПолучитьИзВременногоХранилища(Адрес);
  
  Защита = Новый ОписаниеЗащитыОтОпасныхДействий;
  Защита.ПредупреждатьОбОпасныхДействиях = Ложь;
  
  // Это пример варианта создания объекта внешней обработки для дальнейшего использования
  воОбъект = Обработки.мБлок_МиниБлок.СоздатьОбъектЗащищеннойОбработки(ДвоичныеДанные, "Тест", Защита, Ложь);
  Сообщить("Объект создан: <"+Строка(воОбъект)+">");
  
  // Это пример варианта подключения внешней обработки для дальнейшего использования
  воИмя = Обработки.мБлок_МиниБлок.ПодключитьЗащищеннуюОбработку(ДвоичныеДанные, "Тест", Защита, Ложь);
  Сообщить("Объект подключен: <"+Строка(воИмя)+">");
  
  Возврат воИмя;
КонецФункции

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

// Функция - Создать объект защищенной обработки
//
// Параметры:
//  ДвоичныеДанные            - ДвоичныеДанные - Двоичные данные закодированной внешней обработки
//  Имя                       - Строка - Имя внешней обработки, с которым она будет зарегистрирована в системе.
//  ЗащитаОтОпасныхДействий   - ОписаниеЗащитыОтОпасныхДействий - Структура, описывающая параметры защиты от опасных действий для подключаемого модуля. 
//  БезопасныйРежим           - Булево - Признак подключения внешней обработки в безопасном режиме.По умолчанию Ложь
// 
// Возвращаемое значение:
//   - ВнешняяОбработка       - объект внешней обработки. 
//
Функция СоздатьОбъектЗащищеннойОбработки(ДвоичныеДанные, Имя, ЗащитаОтОпасныхДействий, БезопасныйРежим=Ложь) Экспорт
  ИмяПодключения = ПодключитьЗащищеннуюОбработку(ДвоичныеДанные, Имя, ЗащитаОтОпасныхДействий, БезопасныйРежим);
  ОбъектОбработки = ВнешниеОбработки.Создать(ИмяПодключения);
  Возврат ОбъектОбработки;
КонецФункции

// Функция - Подключить защищенную обработку
//
// Параметры:
//  ДвоичныеДанные            - ДвоичныеДанные - Двоичные данные закодированной внешней обработки
//  Имя                       - Строка - Имя внешней обработки, с которым она будет зарегистрирована в системе.
//  ЗащитаОтОпасныхДействий   - ОписаниеЗащитыОтОпасныхДействий - Структура, описывающая параметры защиты от опасных действий для подключаемого модуля. 
//  БезопасныйРежим           - Булево - Признак подключения внешней обработки в безопасном режиме.По умолчанию Ложь
// 
// Возвращаемое значение:
//   - Строка - Возвращает имя подключенной внешней обработки.
//
Функция ПодключитьЗащищеннуюОбработку(ДвоичныеДанные, Имя, ЗащитаОтОпасныхДействий, БезопасныйРежим=Ложь) Экспорт
  БуферДекодирования  = ПолучитьБуферДвоичныхДанныхИзДвоичныхДанных(ДвоичныеДанные);

  // [Skip] - Старт - 
  // Алгоритм декодирования
  // [Skip] - Финиш - 
  
  ДвоичнаяОбработка = ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(БуферДекодирования);
  
  Путь = ПоместитьВоВременноеХранилище(ДвоичнаяОбработка);
  Обработка = ВнешниеОбработки.Подключить(Путь, Имя, БезопасныйРежим, ЗащитаОтОпасныхДействий);
  Возврат Обработка;
КонецФункции

Функция КодироватьДвоичныеДанные(ДвоичныеДанные) Экспорт
  
  Если ТекущаяДата() > Дата("20190101") Тогда
    Сообщить("Срок тестирования завершен.");
    Возврат ДвоичныеДанные;
  КонецЕсли;
  
  БуферКодирования = ПолучитьБуферДвоичныхДанныхИзДвоичныхДанных(ДвоичныеДанные);

  // [Skip] - Старт - 
  // Алгоритм кодирования
  // [Skip] - Финиш - 
  
  Результат = ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(БуферКодирования);
  Возврат Результат;
КонецФункции

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

 

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

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

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

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

 

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

19

Скачать файлы

Наименование Файл Версия Размер
Архив с расширением и тестовой обработкой
.ZIP 22,54Kb
16.02.18
8
.ZIP 1.0 22,54Kb 8 Скачать

См. также

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. klinval 271 16.02.18 14:08 Сейчас в теме
Правильно я понял: заказчик тоже может вашу обработку скачать и декодировать?
2. adam26 32 16.02.18 14:52 Сейчас в теме
Расширение ставится и у заказчика и у автора. Отдельного декодирования нет.
Вы отправляете в расширение кодированную обработку, а получаете уже объект или имя подключенной обработки для создания объекта или формы через менеджер внешних обработок. Получается что доступа к раскодированной двоичной обработке у заказчика нет.
3. Bazil 420 16.02.18 17:40 Сейчас в теме
(2) В отладке декодированная обработка не доступна?
Вот это вот все
Обработка = ВнешниеОбработки.Подключить(Путь, Имя, БезопасныйРежим, ЗащитаОтОпасныхДействий);
4. adam26 32 16.02.18 17:46 Сейчас в теме
(3) Нет недоступна. Файл с открытой обработкой существует только у Вас и в памяти менеджера внешних обработок после ее подключения. Процесс декодирования происходит исключительно ОЗУ и промежуточные файлы не создаются.
5. prog77 21.02.18 09:09 Сейчас в теме
Спасибо. Очень интересно.
6. MaxS 1604 28.02.18 17:59 Сейчас в теме
Идея интересная. У меня есть потребность в создании демо обработок.
К сожалению на ИС никто не развивает подобные продукты. Предложения принимаются, развития нет.
8. SandDanGlokta 02.04.18 14:57 Сейчас в теме
(7)Мне кажется, что это уже вопросы конкретных заказчиков и исполнителей. Как пользовательское соглашение. Если согласен с условия и ставишь галочку, то потом не жалуйся. Так и тут, если заказчик изначально соглашается, что код будет обфусцирован, то лично я не вижу здесь вины программиста. Мы живём не в розовом мире пони. Хорошо быть альтруистом за чужой счёт, а вот самому заниматься благотворительностью уже накладнее.
9. dobrynin.i.s 92 20.04.19 08:50 Сейчас в теме
1С:Предприятие 8.3 (8.3.13.1644)

1) у меня виснет 1ска при попытке открыть кодированную обработку (в том числе и ТестоваяОбработка_protect.epf) с помощью команды"открыть" , если расширение добавлять в ут 11
2) не вижу разницы между исходной и полученной обработкой (в том числе и ТестоваяОбработка.epf). По моему они обе пусты
3) расширение добавил в пустую конфу - получил файловую базу
{МиниБлок Обработка.мБлок_МиниБлок.МодульМенеджера(33)}: Ошибка при вызове метода контекста (Подключить)
по причине:
Ошибка подключения внешних метаданных
по причине:
Ошибка при выполнении файловой операции 'e1cib/tempstorage/8cfa8430-b191-480a-9ab6-a42e08212642?seanceId=5baa1454-45f4-412f-866b-4c44f192f642'
по причине:
Неверный формат хранилища данных 'e1cib/tempstorage/8cfa8430-b191-480a-9ab6-a42e08212642?seanceId=5baa1454-45f4-412f-866b-4c44f192f642'
места на всех дисках есть, 1ску аод дмином ос запускал, гугл не помог
хелп, нид бэкап
10. dobrynin.i.s 92 21.04.19 10:37 Сейчас в теме
уточнение: в табло конфигуратора значение выражения Обработки.мБлок_МиниБлок.СоздатьОбъектЗащищеннойОбработки(ДвоичныеДанные, "Тест", Защита, Ложь) =
"{МиниБлок Обработка.мБлок_МиниБлок.МодульМенеджера(33)}: Ошибка при вызове метода контекста (Подключить)"

Извиняюсь, увидел текст модуля менеджера в статье - заменил и вроде заработало.
Прикрепленные файлы:
Оставьте свое сообщение