Защита разработок от копирования (Обычная и Управляемая форма)

23.01.19

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

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

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

Наименование Файл Версия Размер
Обфускатор кода (Обычная и управляемая форма)
.epf 41,60Kb
366
.epf 1.0.5 41,60Kb 366 Скачать

Обфускация – приведение исходного текста или исполняемого кода программы к виду, сохраняющему её функциональность, но затрудняющему анализ, понимание алгоритмов работы и модификацию при декомпиляции.

Обычная форма
Обычная форма
Управляемая форма
Управляемая форма

Данная разработка является идейным продолжением разработки coder1cv8  [2 in 1] «Обфускация кода 1С» и «RegExp Тестер». В ней исправлены большинство ошибок разработки данного автора: корректно распознаются директивы компиляции, области, инструкции препроцессора, комментарии, корректно заменяются переменные (не знаю, как у вас, но у меня разработка автора просто так не шифровала код, все равно оставались какие-то частично не зашифрованные переменные.)

Для функционирования самой разработки в системе должна быть зарегистрирована компонента RegEx, а также для шифрования текста должна быть зарегистрирована компонента capicom.dll

Как происходит обфускация:

  1. Удаляет комментарии.
  2. Удаляет области
  3. Заменяет не экспортные функции на guid.
  4. Заменяет не экспортные переменные и параметры на guid.
  5. Если необходимо шифрует с помощью capicom.dll строковые данные, каждый раз ключ разный.
  6. Директивы компиляции и инструкции препроцессора, всегда с новой строки

Обратите внимание, что если использовать шифрование строк в разработке, то это очень сильно замедляет работу, так как при расшифровки будет каждый раз создаваться comОбъект capicom, поэтому в вашем коде необходимо предусмотреть разовую инициализацию этой компоненты, тогда в разы ускорит работу. 

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

Также разработана аналогичная управляемая форма, работает в тонком и толстом клиенте.

Принимаются предложения и замечания. Если понравилась разработка, ставь плюс.

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

Поэтому не пишите, пожалуйста, комментарии «о этической стороне», «что закрываемый код и так никому не нужен» или что «данная защита ломается очень просто», да, такая защита ломается. Но данный способ защиты очень сильно замедляет разбор обработки, а стоимость защиты должна быть сопоставима со стоимостью разработки.

Заменить идентификатор

 

Обычная формаОбфускатор защита кода защита 1с 8 обфускация изменения модулей

См. также

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

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

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

1 стартмани

09.02.2023    2224    9    aximo    4    

2

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

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

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

2 стартмани

30.01.2023    1659    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    2984    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    3832    7    vit59    2    

6

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

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

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

10 стартмани

16.06.2022    10310    80    ZhokhovM    12    

40

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

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

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

2 стартмани

09.03.2022    5654    3    ge_ni    9    

2

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

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

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

1 стартмани

27.12.2021    4556    2    idm80    11    

9
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
92. CSiER 35 31.03.17 05:52 Сейчас в теме
Комментарии из запросов не удаляются, инструкции препроцессора не обрабатываются.
93. karpik666 3760 31.03.17 05:57 Сейчас в теме
(92) отправьте мне в личку пример кода, который у вас не распознался
94. MaxS 2826 03.04.17 07:33 Сейчас в теме
* Хотелось бы сохранять настройки в файл.
* Для шифрования строк добавить бы ещё один способ, не требующий внешних компонент от конечного пользователя.
* Добавить индивидуальную настройку для процедур функций "не шифровать строки"
* Добавить флаг генерировать ненужный код и какой-нибудь числовой показатель для регулирования его объёма.
А на будущее - полная автоматизация. Выбираем внешнюю обработку-исходник, автоматически по имени подтягиваются настройки, на выходе обработка под ключ - изменены текст модуля и всех форм, добавлен пароль на модуль, пароль генерируется и сохраняется в настройках. Сейчас конфигурация умеет раскладывать обработку в xml и собирать обратно, поэтому можно там брать код и имена реквизитов форм...
Мне бы это сэкономило время при подготовке демо обработок после выхода новой версии основной обработки. ))
95. karpik666 3760 03.04.17 07:40 Сейчас в теме
(94) пожелания приняты, какие именно настройки хотите сохранять?
Про автоматизацию было бы конечно круто, но тут мне кажется средствами 1С уже не обойтись.
96. MaxS 2826 03.04.17 08:09 Сейчас в теме
(95) Настройки - Флажки на вкладке Дерево лексического запутывания.
На счет автоматизации, например, в конфигурации КД3 я сделал средствами 1С выгрузку обработки в xml, замена текста модуля в файле и сборка обработки обратно.
97. karpik666 3760 03.04.17 08:13 Сейчас в теме
(96) ооо, спасибо, буду иметь ввиду
98. MaxS 2826 03.04.17 08:31 Сейчас в теме
(97) Пример кода разборки/сборки обработки ))

Пока Истина Цикл

КаталогОбработки = ПолучитьИмяВременногоФайла();
СоздатьКаталог(КаталогОбработки);
ИмяФайлаXMLОбработки = КаталогОбработки + "\ОбработкаОбмена.xml";
ПутьКИБ = ОбщегоНазначения.ПолучитьПредставлениеИнформационнойБазы();
ИмяЛогФайла = КаталогОбработки +"\" + ФайлОбработки.ИмяБезРасширения+"_log.txt";

//{ Выгрузка обработки в файлы
КомандаЗапуска = КаталогПрограммы() + "1cv8.exe" 
+ " DESIGNER "
+ "/F " + ПутьКИБ
+" /DumpExternalDataProcessorOrReportToFiles "
+ ВКавычках(ИмяФайлаXMLОбработки)
+ " " + ВКавычках(ФайлОбработки.ПолноеИмя)
+ "  /Out" + ВКавычках(ИмяЛогФайла);

КодВозврата = Неопределено;
ЗапуститьПриложение(КомандаЗапуска, ФайлОбработки.Путь, Истина, КодВозврата);
СтрЛог = ПрочитатьФайлВСтроку(ИмяЛогФайла, КодировкаТекста.ANSI);
//}

Если Найти(СтрЛог,"Выгрузка завершена.")=0 Тогда
	Прервать;
КонецЕсли;

//{ Загрузка обработки из файлов
ЗаписатьСтрокуВФайл(КаталогОбработки + "\ОбработкаОбмена\Ext\ObjectModule.bsl", ТХ.ПолучитьТекст());
КомандаЗапуска = СтрЗаменить(КомандаЗапуска,"DumpExternalDataProcessorOrReportToFiles","LoadExternalDataProcessorOrReportFromFiles");

КодВозврата = Неопределено;
ЗапуститьПриложение(КомандаЗапуска, ФайлОбработки.Путь, Истина, КодВозврата);
СтрЛог = ПрочитатьФайлВСтроку(ИмяЛогФайла, КодировкаТекста.ANSI);
//}


Если Найти(СтрЛог,"Загрузка завершена.")=0 Тогда
	Прервать;
КонецЕсли;

Результат = Истина;
УдалитьФайлы(КаталогОбработки);
Прервать;

КонецЦикла;

Показать

Может быть когда-нибудь подготовлю cfu и опубликую решение под ключ.
vis_tmp; teflon; 33lab; olegmedvedev; karpik666; +5 Ответить
127. vis_tmp 32 27.09.19 12:27 Сейчас в теме
99. vas2005 8 03.09.17 23:46 Сейчас в теме
При запускена УФ ругается(((
хотя на обычных формах работает(((

{Форма.Form.Форма(109,25)}: Тип не определен (ОписаниеОповещения)
лДиалог.Показать(Новый <<?>>ОписаниеОповещения("ОткрытьКодЗавершение", ЭтаФорма));
{Форма.Form.Форма(142,25)}: Тип не определен (ОписаниеОповещения)
лДиалог.Показать(Новый <<?>>ОписаниеОповещения("СохранитьКодЗавершение", ЭтаФорма));
{Форма.Form.Форма(687,110)}: Слишком много фактических параметров (ОткрытьФорму)
ОткрытьФорму("ВнешняяОбработка.ОбфускацияКода1С.Форма.ФормаВыбораЗаполненияУпр", , Элементы.ДеревоАнализа,,,<<?>>,,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
100. karpik666 3760 04.09.17 09:39 Сейчас в теме
(99) Здравствуйте, скорее всего у вас древняя платформа для управляемых форм, поставьте хотя быть 8.3.6
103. Dnki 4 14.09.17 16:58 Сейчас в теме
Поразила идея сделать красиво: формы Об и Упр в одном флаконе.
Однако! тексты обработки просто продублированы!
Где гарантия, что алгоритмы идентичны? Я пользуюсь ОФ. Она поддерживается?
104. karpik666 3760 14.09.17 17:09 Сейчас в теме
(103) на обычной и управляемой форме одинаковый код, вы правы, по поводу универсальности, однако на управляемой форме весь код исполняется на клиенте, если я захочу, чтобы он был одинаков и там и там, то я его должен поместить в модуль объекта обработки "на сервер".
105. JohnPawn 335 11.11.17 22:18 Сейчас в теме
Для более корректного переноса, которое зависит от "Ограничение количества символов в строке", предлагаю внести 3 поправки в функцию
Функция ПроставитьРазделительСтрок()

1) перед циклом
Для лСч=0 По лКолвоСтрок Цикл 
добавляем переменую
лНачалоБлока=0;

2) внутри цикла заменяем
Если лНачало-лПозиция>=ОграничениеКолВаСимволов Тогда
на
Если лНачало-лНачалоБлока>=ОграничениеКолВаСимволов Тогда

3) внутри
Если лНачало-лНачалоБлока>=ОграничениеКолВаСимволов Тогда КонецЕсли;
добавляем
лНачалоБлока=лНачало;

Без поправок ограничение срабатывает, только если расстояние между соседними ";" больше ограничителя символов. Обработку скачивал давно.
karpik666; +1 Ответить
107. karpik666 3760 02.04.18 15:21 Сейчас в теме
(105) большое спасибо, давно не занимался данной обработкой.
106. пользователь 02.04.18 14:53
Сообщение было скрыто модератором.
...
108. maksa2005 530 13.08.18 07:02 Сейчас в теме
109. maksa2005 530 30.08.18 12:57 Сейчас в теме
Спасибо разработчику. Защитил хоть как-то свои платные творения))
111. d.zhukov 1392 27.09.18 10:19 Сейчас в теме
Спасибо за обработку. Вопрос разработчику: как добавить исключения? у меня слово "запрос" и "массив" заменяет в итоге обработка валится с ошибкой после обфускации
113. karpik666 3760 27.09.18 10:37 Сейчас в теме
(111) Добрый день, тут я думаю не обойтись словами исключениями, в данном случае нужно обрабатывать целиком конструкцию "новый", давное не занимался обработкой, есть многое в планах.
112. d.zhukov 1392 27.09.18 10:32 Сейчас в теме
Если у меня строчка "Запрос = Новый Запрос" заменяет соответственно оба слова. Желательно на такой случай придумать список слов-исключений
114. d.zhukov 1392 28.09.18 12:41 Сейчас в теме
и еще один странный момент. после обфускации все переменые уходят в конец текста. может это как то настраивается?
115. artfa 58 28.09.18 14:32 Сейчас в теме
на управляемых формах не поддерживало инструкции препроцессора, исправили?
116. d.zhukov 1392 04.10.18 14:24 Сейчас в теме
Данная обработка не решает вопрос защиты от декомпилятора. может я не так что то делаю? Как сделать, чтобы при декомпиляции вызвать ошибку "Индекс за границами массива"?
123. SerVer1C 748 12.02.19 08:02 Сейчас в теме
(116)
Как сделать, чтобы при декомпиляции вызвать ошибку "Индекс за границами массива"?
Попробуйте использовать несуществующий индекс в том участке алгоритма, в который никогда не зайдет поток выполнения.
117. d.zhukov 1392 05.10.18 06:56 Сейчас в теме
Андрей, подскажите, плз как отправить декомпилятор в ошибку "Индекс за границами массива"? У вас же вроде получилось это сделать с обработкой печати для ккм) можно в лс
118. SeiOkami 3423 08.02.19 09:37 Сейчас в теме
Уже пробовали добавлять символы разных языков?
Типа:


&НаСервере
Процедура 程დההלי程ךת程程קין차()

КонецПроцедуры
119. karpik666 3760 08.02.19 10:21 Сейчас в теме
(118) нет, можно конечно указать "Произвольный символ", но именно получить такую строку не делал, не вижу разницы преобразовать название процедуры к такому виду, или к "x_________".
120. SeiOkami 3423 08.02.19 13:55 Сейчас в теме
(119) добавить пыли в глаза для вызова состояния полного офигевания)
121. dmarenin 347 10.02.19 16:27 Сейчас в теме
(120) дак а какой смысл, в конечном итоге всё приходит в байт код. байт код можно разобрать
Прикрепленные файлы:
122. SerVer1C 748 12.02.19 07:59 Сейчас в теме
Так себе эта затея с обфускацией исходника... Текст оригинальной обработки первоначального автора удалось восстановить достаточно быстро. Тут нужен настоящий обфускатор, типа нетленки, а это просто обработка по замене названий. Для программиста совсем не важно, как называется переменная: а1 или [guid], логика алгоритма не меняется. Более полезная вещь - это обфускатор оп-кода 1с. Вот тут обратных инструментов практически нет.
126. Dream_kz 129 04.04.19 13:17 Сейчас в теме
В Форме ФормаВыбораЗаполненияУпр у реквизита ВариантЗаполнения не стоит КнопкаВыпадающегоСписка, из-за этого нельзя поменять вариант
Платформа 8.3.13.1690
128. eVGNN 04.07.20 23:08 Сейчас в теме
karpik666, Доброго времени суток, как с Вами можно связаться?
129. karpik666 3760 16.07.20 01:48 Сейчас в теме
(128) здравствуйте, по какому вопросу?
130. RPGrigorev 692 11.03.21 11:30 Сейчас в теме
Отличный инструмент, автору спасибо
134. json 3297 08.02.24 16:48 Сейчас в теме
Процедура Тест()
	Строка = "
	|
	// комментарий
	|Текст
	// комментарий
	|";
КонецПроцедуры


Вот такой код некорректно преобразовывает, если комментарий внутри многострочной строки
Оставьте свое сообщение