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

16.02.18

Разработка - Защита ПО и шифрование

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

Скачать исходный код

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

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

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

  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.

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

См. также

Запрет глобального поиска в конфигурации

Защита ПО и шифрование Платформа 1С v8.3 1С:Бухгалтерия 3.0 Абонемент ($m)

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

1 стартмани

09.02.2023    2249    9    aximo    4    

2

Как защитить pdf файл

Защита ПО и шифрование Абонемент ($m)

Для установки защиты pdf документа, полученного в 1С, написано консольное приложение на c#., использующее одну зависимость pdfSharp.dll. В результате работы приложения ограничены операции над документом и записаны метаданные. С помощью аргументов командной строки можно управлять работой приложения.

2 стартмани

30.01.2023    1701    1    olevlasam    3    

3

Универсальный синтаксический анализатор ASN.1 для декодирования .key, .cer, .der, .p7m, .p7s, .crt, .pem

Защита ПО и шифрование Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Универсальный синтаксический анализатор ASN.1, который может декодировать любую допустимую структуру ASN.1 DER или BER, независимо от того, закодирована ли она в кодировке Base64 (распознаются необработанные base64, защита PEM и begin-base64) или в шестнадцатеричном кодировании.

1 стартмани

04.12.2022    3037    12    keyn5565`    0    

13

Шифрование строки на основе мастер-пароля в 1С Предприятие 8.3.19

Защита ПО и шифрование Платформа 1С v8.3 Абонемент ($m)

Демонстрация возможностей шифрования строки на основе мастер-пароля в 1С Предприятие 8.3.19. AES без zip файла, RSA, PKDF2. (c использованием библиотеки С# через com).

2 стартмани

31.08.2022    3878    7    vit59    2    

6

Обфускатор байт-кода

Защита ПО и шифрование Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

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

10 стартмани

16.06.2022    10489    82    ZhokhovM    12    

41

Как уберечь конструкторскую документацию от воровства конкурентами?

Защита ПО и шифрование Платформа 1С v7.7 Платформа 1С v8.3 Абонемент ($m)

Как уберечь конструкторскую документацию от воровства конкурентами? Недавно столкнулся с этой проблемой. Заказчик серьёзно обеспокоен утечкой информации о конструкторских разработках в адрес конкурентов, за счет подкупа исполнителей, занимающихся производством по конструкторской документации, операторов технологического оборудования и обрабатывающих центров по изготовлению деталей и сборочных единиц.

2 стартмани

09.03.2022    5698    3    ge_ni    9    

2

Защита конфигураций, обработок, расширений 1С онлайн, управление версиями

Защита ПО и шифрование Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Система построена на веб платформе, все управление происходит на сайте в личном кабинете пользователя.

1 стартмани

27.12.2021    4605    2    idm80    11    

9
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. klinval 338 16.02.18 14:08 Сейчас в теме
Правильно я понял: заказчик тоже может вашу обработку скачать и декодировать?
2. adam26 42 16.02.18 14:52 Сейчас в теме
Расширение ставится и у заказчика и у автора. Отдельного декодирования нет.
Вы отправляете в расширение кодированную обработку, а получаете уже объект или имя подключенной обработки для создания объекта или формы через менеджер внешних обработок. Получается что доступа к раскодированной двоичной обработке у заказчика нет.
3. Bazil 557 16.02.18 17:40 Сейчас в теме
(2) В отладке декодированная обработка не доступна?
Вот это вот все
Обработка = ВнешниеОбработки.Подключить(Путь, Имя, БезопасныйРежим, ЗащитаОтОпасныхДействий);
4. adam26 42 16.02.18 17:46 Сейчас в теме
(3) Нет недоступна. Файл с открытой обработкой существует только у Вас и в памяти менеджера внешних обработок после ее подключения. Процесс декодирования происходит исключительно ОЗУ и промежуточные файлы не создаются.
11. eVGNN 05.07.20 09:18 Сейчас в теме
(2)Добрый день! Как с Вами можно связаться?
5. prog77 21.02.18 09:09 Сейчас в теме
Спасибо. Очень интересно.
6. MaxS 2847 28.02.18 17:59 Сейчас в теме
Идея интересная. У меня есть потребность в создании демо обработок.
К сожалению на ИС никто не развивает подобные продукты. Предложения принимаются, развития нет.
7. пользователь 02.04.18 14:47
Сообщение было скрыто модератором.
...
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)}: Ошибка при вызове метода контекста (Подключить)"

Извиняюсь, увидел текст модуля менеджера в статье - заменил и вроде заработало.
Прикрепленные файлы:
12. user654641_yaga_m 12 12.09.22 13:45 Сейчас в теме
ДД, может не совсем понял Вашу статью! Купил, установил. Но не могу даже протестировать! Я так понимаю стоит старая дата - как исправить?
13. user654641_yaga_m 12 13.09.22 15:53 Сейчас в теме
Вопрос снимается, но потрачено 2 часа личного времени! Написать 2 строки в статье и все было бы понятно.
14. OldthiefXXX 153 14.10.22 12:03 Сейчас в теме
(13)
Как решил подскажи? че то я уже голову сломал
15. user654641_yaga_m 12 14.10.22 13:15 Сейчас в теме
(14) "Расширку" поставь свою, а не его - общий модуль я имею ввиду - текст кода он приводит... Расширку он выгрузил "нестандартно" и код не виден - он в виртуалке - тоже защита от чтения.
16. OldthiefXXX 153 14.10.22 13:22 Сейчас в теме
Что где менять? у меня такая же трабла:

Неверный формат хранилища данных 'e1cib/tempstorage/22cae0d6-9a57-412f-abd8-b4a5f92a9dbb?seanceId=OThhMDk3NDgtMjU0ZS00NWRhLWFkNGYtMjY4NTA5ZWVkMDhjrev­91V0ttUiWw6u5xhPrYgAAAAA%3D'
{Обработка.мБлок_МиниБлок.МодульМенеджера(33)}:
{Обработка.мБлок_МиниБлок.МодульМенеджера(1)}:
{Обработка.мБлок_МиниБлок.Форма.Форма.Форма(69)}:воОбъект = Обработки.мБлок_МиниБлок.СоздатьОбъектЗащищеннойОбработки(ДвоичныеДанные, "Тест", Защита, Ложь);
{Обработка.мБлок_МиниБлок.Форма.Форма.Форма(56)}:воИмя = ЗагрузитьНаСервере(Адрес);

по причине:
Ошибка подключения внешних метаданных
по причине:
Ошибка при выполнении файловой операции 'e1cib/tempstorage/22cae0d6-9a57-412f-abd8-b4a5f92a9dbb?seanceId=OThhMDk3NDgtMjU0ZS00NWRhLWFkNGYtMjY4NTA5ZWVkMDhjrev­91V0ttUiWw6u5xhPrYgAAAAA%3D'
по причине:
Неверный формат хранилища данных 'e1cib/tempstorage/22cae0d6-9a57-412f-abd8-b4a5f92a9dbb?seanceId=OThhMDk3NDgtMjU0ZS00NWRhLWFkNGYtMjY4NTA5ZWVkMDhjrev­91V0ttUiWw6u5xhPrYgAAAAA%3D'
17. user654641_yaga_m 12 14.10.22 14:30 Сейчас в теме
(14) сорь, этих расширок в последнее время... менеджер формы открывается? Еще раз делаешь свою расширку, обработку копируешь форму и в менеджер вписываешь приведенный код.
18. user654641_yaga_m 12 17.10.22 10:15 Сейчас в теме
19. adam26 42 16.07.23 04:11 Сейчас в теме
Добрый день.
Отошел от 1С, работал рядом, в соседней финансовой сфере.
Есть вероятность что вернусь в течении 2-х месяцев.
Если обработка еще интересна попробую реанимировать и сделать коммерческий вариант.
Стоимость кодировки будет 100-500 рублей за кодируемую обработку.
Оставьте свое сообщение