Защита разработок от копирования (Обычная и Управляемая форма)
Программирование - Защита и шифрование
Обычная формаОбфускатор защита кода защита 1С 1с 8 обфускация изменения модулей
Обфускация – приведение исходного текста или исполняемого кода программы к виду, сохраняющему её функциональность, но затрудняющему анализ, понимание алгоритмов работы и модификацию при декомпиляции.
Обычная форма |
---|
![]() |
Управляемая форма |
![]() |
Данная разработка является идейным продолжением разработки coder1cv8 [2 in 1] «Обфускация кода 1С» и «RegExp Тестер». В ней исправлены большинство ошибок разработки данного автора: корректно распознаются директивы компиляции, области, инструкции препроцессора, комментарии, корректно заменяются переменные (не знаю, как у вас, но у меня разработка автора просто так не шифровала код, все равно оставались какие-то частично не зашифрованные переменные.)
Для функционирования самой разработки в системе должна быть зарегистрирована компонента RegEx, а также для шифрования текста должна быть зарегистрирована компонента capicom.dll.
Как происходит обфускация:
- Удаляет комментарии.
- Удаляет области
- Заменяет не экспортные функции на guid.
- Заменяет не экспортные переменные и параметры на guid.
- Если необходимо шифрует с помощью capicom.dll строковые данные, каждый раз ключ разный.
- Директивы компиляции и инструкции препроцессора, всегда с новой строки
Обратите внимание, что если использовать шифрование строк в разработке, то это очень сильно замедляет работу, так как при расшифровки будет каждый раз создаваться comОбъект capicom, поэтому в вашем коде необходимо предусмотреть разовую инициализацию этой компоненты, тогда в разы ускорит работу.
Также на обычной форме есть кнопка "снять пометку с реквизитов формы" - она снимает пометку с тех переменных которые не соответствуют шаблону, где первые символы с маленькой буквы, а последующие с большой, либо один символ с маленькой буквы, это рассчитано на тех разработчиков, которые используют для идентификации переменных: глобальный - начиная с символа "м", локальных - "л" и т.д., хотя наверное эта кнопка и не нужна.
Также разработана аналогичная управляемая форма, работает в тонком и толстом клиенте.
Принимаются предложения и замечания. Если понравилась разработка, ставь плюс.
Дисклеймер. Я понимаю, что у программистов считается правилом хорошего тона делиться своим кодом, и сам не против этого, однако все мы взрослые люди, и никому не хочется, чтобы на нем наживались, поэтому делать код закрытым или открытым остается на усмотрение разработчика.
Поэтому не пишите, пожалуйста, комментарии «о этической стороне», «что закрываемый код и так никому не нужен» или что «данная защита ломается очень просто», да, такая защита ломается. Но данный способ защиты очень сильно замедляет разбор обработки, а стоимость защиты должна быть сопоставима со стоимостью разработки.
Общее
Перенос данных XML с Анализом и выборочной загрузкой.
Универсальный редактор таблиц и движения документа (LITE) (Обычная Форма)
Универсальный редактор таблиц и движения документа (PRO) (Обычная Форма)
Универсальный редактор Таблиц и Движений документов (Управляемая форма)
Запуск 1С под другим пользователем без пароля.
Защита разработок от копирования (Обычная и Управляемая форма)
Редактирование прав на файлы Windows
Управление торговлей 11
Установка цен в УТ11. Произвольный запрос к данным ИБ
ЗУП 2.5
Скрываем неиспользуемые виды расчета
[ОЗТ] Перезаполнить данные о начислениях текущего сотрудника (Обычная форма)
Комплексная И УПП
Форма работы с сотрудниками, как из зуп 2.5
ЕГАИС
Инвентаризация по акцизной марке ЕГАИС\Корректировка остатков ЕГАИС (Управление торговлей 10.3)
Скачать файлы
Наименование | Файл | Версия | Размер | |||
---|---|---|---|---|---|---|
Обфускатор кода (Обычная и управляемая форма)
.epf 41,60Kb
12.01.17
292
|
.epf | 1.0.5 | 41,60Kb | 292 | Скачать |
См. также
Специальные предложения
Оказывается, "для продвижения публикаций", кроме разноцветной рекламы внизу статьи, можно "поднимать" ветку обсуждений сообщениями об обновлениях не редактирую статью...
ЗЫ Что это со мной сегодня? Съел наверно что то...
ЗЫЫ Не проще ли вынести то что не хочешь в модуль с паролем? Трудоемкость поиска "ломалки" для запароленного модуля не намного меньше от "восстановления" исходника ...
В свое время скачивал и протопит. Теперь скачал эту.
В обоих одно зло: небольшие процедуры обрабатывает нормально.
А чуть больше, так образуются длинные строки (2700 символов) .
Ставлю "ограничение = 100". Никак не реагирует.
Такие тексты просто не работают в редакторе. Он тормозит и глючит. (платформа 8.3.9)
Вторая проблема: мы программисты грешим, когда используем в именах переменных слова языка 1С. У кого нет такого текста?
Запрос = Новый Запрос;
Хорошо бы их не предлагать на изменение.
Третье предложение: дать опцию преобразовывать текст запроса или нет.
Объясню почему: вот так преобразовалось "КАК ЗарДох"+символы.пс+ "
а в потом в конце стоит значок непечатный символ, похожий на " о". Судя по тексту, им делят строки, но не получилось.
Некоторые пишут такой код, что начинаешь плеваться и проходишь мимо...
Жалко иногда приходится исправлять ошибки в таком коде, тут уже мимо ни как не получится пройти..
спасибо что ты есть, гитхаб
а если по другому подумать...у фрилансеров бывают недоборосовестнные заказчики.
Фрилансер сделал заказ, а заказчик пропал и не оплатил.
Зашифровать код, отправить триал версию, после оплаты полную версию предоставить,
Вот для этого можно и заюзать данный инструмент!
(20) МимохожийОднако, смотрите шире. Кроме сотрудников на ставке и всяких франчей еще есть фрилансеры. И иногда их пытаются обмануть с оплатой. Это как раз для случая, когда клиенту нужно показать работающий код для тестирования, который он после кражи не сможет использовать, получить вознаграждение и далее отдать полноценную работу.
ну если в код зашить ограничение по дате и зашифровать - то думаю не сможет ... именно для этих целей мне данная обработка интересна
Текущий файл уже с исправленной ошибкой ?
Функция Процедура1() Экспорт
Текст = "//";
Возврат Текст;
КонецФункции
Функция Процедура2() Экспорт
Текст = "//";
Возврат Текст;
КонецФункции
Функция Процедура1() Экспорт x34f5fdf9d4054708942e4b249b39edc8 = \1\2\3; Возврат x34f5fdf9d4054708942e4b249b39edc8; КонецФункции
который естественно не компилируются, поскольку \1\2\3 это явно не строка. Причем вместо \1\2\3 должно стоять все тот же текст "//" (шифрованием не пользовался).
(56) а как бы вы хотели, чтобы программа такой код зашифровала? в данном случае шифруется ведь не скомпилированный код, а просо текст, а у вас экспортная процедура, у которой, если поменять наименование может что-то сломаться в программе, так как эта процедура может вызываться в других местах, стандартная функция ТекущаяДата(), а также функция получения Даты, здесь просто нечему шифроваться.
(58) DrAku1a, я думал еще сделать деобфускатор, однако все равно наименование переменных и комментарии никак не восстановишь, и разбираться в таком коде та еще морока, я когда-то пытался разобраться в работе конфигурации Широкоформатная печать, хоть там код и был не шифрованным, однако я успел раз 300 обматерить того "разработчика", который писал его.
(57) Agapov_Stas, для того, что вы хотите нужен шифратор байт-кода, тогда действительно можно зашифровать так, что никто не сможет взломать, хотя точно не знаю, может уже есть какой-то деобфускатор.
Скачал обработку, проверил, и понял что она для меня ничего полезного не сделает.
Я хочу защитить код своей обработки тогда, когда создаю для нового заказчика демоверсию, которая перестанет работать через определенное время. Поэтому прописываю триал период в коде.
Вот что получилось после вашего преобразования:
Процедура ПривязатьОплаты() Экспорт Если ТекущаяДата() > Дата(2016,4,1) Тогда Возврат; КонецЕсли;
Т.е. ничего вообще не изменилось. До этого выкладывали на ИнфоСтарте обфускатор кода, он меня тоже до конца не устроил, но у него лучше получалось.
Тут речь идет о комментариях в тексте запроса. Сразу отмечу, что удаление комментариев не будет являться решением, поскольку иногда их добавляют с той целью, чтобы потом эти комментарии заменить на что-то нужное с помощью СтрЗаменить.
Процедура Тест() x9cfbec67d813410cbf161778a7400fd8 = Новый Запрос; x9fe556d4a7a84a7e810b99dfb9d9562f = "ВЫБРАТЬ РАЗРЕШЕННЫЕ //Наименование Организации.Наименование КАК Наименование, //Наименование полное Организации.НаименованиеПолное КАК ПолноеНаименование ИЗ Справочник.Организации КАК Организации"; x9cfbec67d813410cbf161778a7400fd8.Текст = x9fe556d4a7a84a7e810b99dfb9d9562f; xbfcc5e2671274175b21383b9fdd8a9f4 = x9cfbec67d813410cbf161778a7400fd8.Выполнить();
x2b50b9ce97754ff396a0ad5206686d38 = xbfcc5e2671274175b21383b9fdd8a9f4.Выбрать();
Если x2b50b9ce97754ff396a0ad5206686d38.Следующий() Тогда Сообщить(x2b50b9ce97754ff396a0ad5206686d38.Наименование);
Сообщить(x2b50b9ce97754ff396a0ad5206686d38.ПолноеНаименование); КонецЕсли; КонецПроцедуры
Вроде нормально строку распознала, с учетом комментариев
Процедура Тест() x916220aab32c40a1b19622bc723f6cca = Новый Запрос; x5cbbbf848af145f3a8df8068ee514b31 = "ВЫБРАТЬ РАЗРЕШЕННЫЕ"+Символы.ПС+" //Наименование"+Символы.ПС+" Организации.Наименование КАК Наименование,"+Символы.ПС+" //Наименование полное"+Символы.ПС+" Организации.НаименованиеПолное КАК ПолноеНаименование"+Символы.ПС+"ИЗ"+Символы.ПС+" Справочник.Организации КАК Организации";
x916220aab32c40a1b19622bc723f6cca.Текст = x5cbbbf848af145f3a8df8068ee514b31; x7781e025410e4a0f8d4dba697f964a3a = x916220aab32c40a1b19622bc723f6cca.Выполнить();
xdc0ca4d0a3444b798b6f28ec65b7f97d = x7781e025410e4a0f8d4dba697f964a3a.Выбрать();
Если xdc0ca4d0a3444b798b6f28ec65b7f97d.Следующий() Тогда Сообщить(xdc0ca4d0a3444b798b6f28ec65b7f97d.Наименование);
Сообщить(xdc0ca4d0a3444b798b6f28ec65b7f97d.ПолноеНаименование); КонецЕсли; КонецПроцедуры
В принципе так нормально учитываются все переносы строк.
Процедура Тест()
Запрос = Новый Запрос;
ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Организации.Наименование КАК Наименование,
| Организации.НаименованиеПолное КАК ПолноеНаименование
|ИЗ
| Справочник.Организации КАК Организации";
Запрос.Текст = ТекстЗапроса;
Резальтат = Запрос.Выполнить();
Выборка = Резальтат.Выбрать();
Если Выборка.Следующий() Тогда
Сообщить(Выборка.Наименование);
Сообщить(Выборка.ПолноеНаименование);
КонецЕсли;
КонецПроцедуры
ПоказатьА в чем сложность то с этим бороться? С тех пор как 1с добавили рефакторинг в конфигуратор заменять имена переменных прям очень не очень защита.
Или оно что то еще может кроме переименования и замены форматирования ?
Удаляет комментарии.
Удаляет области
Заменяет не экспортные функции на guid.
Заменяет не экспортные переменные и параметры на guid.
Если необходимо шифрует с помощью capicom.dll строковые данные, каждый раз ключ разный.
Директивы компиляции и инструкции препроцессора, всегда с новой строки
В принципе пока больше и ничего, Та же нетленка
Конечно можно вручную или с помощью рефакторинга заменять переменные (хотя на встроенный 1с-овский я бы не сильно надеялся, постоянно меня подводил, когда код более менее сложный), вопрос сколько на такую замену уйдет времени и будет ли вам все понятно. Сейчас это конечно довольно простая защита, но буду развивать.
Заменил переносы строк на "+Символы.ПС +", теперь корректно обрабатываются запросы. содержащие комментарии
Настроил немного по-другом получения кавычек в строке, надеюсь к ним больше не придется возвращаться.
все слова кроме строк приводятся к нижнему регистру.
Здравствуйте,
так и не понял как пользоваться(((
Только текст перегоняет - это пожалуйста, но открыл нужную обработку для защиты - увидел только глобальные переменные..., ничего окромя...
скопировал текст из форм - да, с ним отработал, вставил обратно в форму - куча ошибок )))
Поясните может. Может к версии платформы привязан?
Спасибо.
Система контроля версий типа git, mercurial или bazaar поможет получить желаемое.
Алгоритм примерно такой:
1.1 сделал обработку,
1.2 отладил и закоммитил,
2.1 создал ветку release 1.0,
2.2 в ней выполнил обфускацию и закоммитил
2.3 обработку отдал заказчику/ опубликовал.
Всплыла бага:
1.1 закрыл ветку release 1.0,
1.2 переключился на ветку develope,
1.3 внес исправления и закоммитил,
2.1 добавил ветку release 1.1,
2.2 в ней выполнил обфускацию и закоммитил
2.3 обработку отдал заказчику/ опубликовал.
А добавление какого либо ключа для обратной расшифровки - это дополнительная уязвимость для и так весьма слабой защиты.
Правильный подход (с моей точки зрения):
* Развить мегаидею до уровня, чтобы с ног валила
* Написать про нее на ресурсах уровня инфостарта/хабра, застолбив таким образом авторство
* Выбрать лицензию распространения кода (например, "Все платно, копировать запрещено")
* Еще раз отрекламировать свое решение, чтобы было понятно, где его покупать
Итого получается:
* все знают кто автор, что умеет делать его продукт, как получить этот продукт себе.
* при обнаружении злостного копирования - все ходы записаны, нарушение лицензии, суд, сибирь.
Про защиту идеи:
* благодаря публичности - многие подтвердят, кто застолбил идею
* идеи вообще защищаются патентами, а не обфускацией
* украсть идею, которая воплощена в обфусцированный код - ничего не стоит. Apple придумало телефон без кнопок с тачскрином. Кода никто не видел (закрыт и обфусцирован), но телефонов таких теперь кругом. Идеей воспользовались не имея кода apple в руках, т.е. идею это не защитило от копирования.
* Для шифрования строк добавить бы ещё один способ, не требующий внешних компонент от конечного пользователя.
* Добавить индивидуальную настройку для процедур функций "не шифровать строки"
* Добавить флаг генерировать ненужный код и какой-нибудь числовой показатель для регулирования его объёма.
А на будущее - полная автоматизация. Выбираем внешнюю обработку-исходник, автоматически по имени подтягиваются настройки, на выходе обработка под ключ - изменены текст модуля и всех форм, добавлен пароль на модуль, пароль генерируется и сохраняется в настройках. Сейчас конфигурация умеет раскладывать обработку в xml и собирать обратно, поэтому можно там брать код и имена реквизитов форм...
Мне бы это сэкономило время при подготовке демо обработок после выхода новой версии основной обработки. ))

Просмотры 28364
Загрузки 281
Комментарии 121
Создание 28.03.16 00:07
Обновление 23.01.19 12:41
№ Публикации 506875
Рубрики Защита и шифрование
Кому Программист
Тип файла Внешняя обработка (ert,epf)
Платформа
Платформа 1С v8.x (все механизмы) ,
Управляемые формы
Конфигурация Конфигурации 1cv8
Операционная система Windows
Страна Не имеет значения
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Раздел учета Не имеет значения
Доступ к файлу Абонемент ($m)
Код открыт Да
