Обфускация кода 1С (приведение в нечитаемый вид) для платформы 1С:Предприятие 8.3.7

19.05.19

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

Обработка для обфуксации (приведения в нечитаемый вид) кода 1С, это может использоваться как один из способов защиты программных модулей.

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

Наименование Файл Версия Размер
Обфускация кода 1С (приведение в нечитаемый вид) для платформы 1С:Предприятие 8.3.7
.epf 12,79Kb
348
.epf 12,79Kb 348 Скачать

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


Выполняются следующие действия:

  • Убираются Области;
  • Убираются все комментарии;
  • Имена не экспортных функций преобразуются в набор символов;
  • Имена переменных преобразуются в набор символов;
  • Убираются переносы строк;
  • Шифруются строковые константы в тексте в нечитаемый набор символов;
  • Вставляются ничего не значащие функции и выражения в код.

Добавлено и исправлено в версии 2:

  • В строковых константах кодируются числа;
  • Операторы препроцессора остаются одни на строке, после обработки кода;
  • Добавлена возможность вручную изменить какие идентификаторы заменять.

С помощью обработки можно изменять код общих модулей и модули объектов и менеджеров.

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

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

Использование обработки:

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

Код обработки открыт.

Используются только средства встроенного языка 1С.

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

См. также

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

Защита ПО и шифрование Платформа 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    1657    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    10299    79    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
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Pavgorb 21.12.15 18:16 Сейчас в теме
Обновил до 8.3.7, запустил в режиме толстого клиента, конвертировал...
Увы, после переноса текста в исходную обработку возникли синтаксические ошибки.
Пока не понял в чем дело, но похоже "не любит" двойные кавычки, Экспорт и представление дат в явном виде.
3. masterkio 334 21.12.15 18:47 Сейчас в теме
(1) Pavgorb, Если есть возможность, можете прислать обработку, в которой такое происходит, что бы я смог исправить ошибку?
5. ixijixi 1775 22.12.15 08:36 Сейчас в теме
(3) у меня тоже возникли синтаксические ошибки. Пытался обфусцировать код формы Вашей обработки.
7. masterkio 334 22.12.15 08:58 Сейчас в теме
(5) the1, Для формы не подходит, т.к. там заменяются переменные, которые являются реквизитами формы, поэтому возникают ошибки.
В описании написано, что только для общих модулей и модулей объектов и модулей менеджеров.

По формам думал, но к сожалению, обработкой не возможно пользоваться, если в конфигурации стоит режим совместимости, с версиями ниже 8.3.7, соответственно не получиться указать нужную форму, для анализа ее реквизитов. А т.к. сейчас львиная доля конфигураций еще в режиме совместимости, то я решил отказаться от этого в угоду универсальности обработки.
2. Evil Beaver 8107 21.12.15 18:34 Сейчас в теме
Замена идентификаторов на GUID (с добавлением "х", чтобы начиналось с буквы), это еще не обфускация.
SerVer1C; Silenser; dj_serega; igormiro; Diversus; nSpirit2; CSiER; TreeDogNight; u_n_k_n_o_w_n; qweento; Andreyyy; Yashazz; awa; JohnyDeath; +14 Ответить
4. masterkio 334 21.12.15 18:48 Сейчас в теме
(2) Evil Beaver, предложите, что еще можно сделать используя только встроенный язык.
23. Evil Beaver 8107 23.12.15 14:27 Сейчас в теме
(4) (6) the1 обычно еще добавляют запутывание control-flow. Добавляют неочевидные условия, goto-переходы и т.п. Но это, конечно отдельная сложная и интересная тема.

Например. Если вы даже без переименования идентификаторов замените все условия и циклы на GOTO - уже никто разбираться не захочет. И для форм сработает, ибо идентификаторы целы.
24. so-quest 140 23.12.15 15:19 Сейчас в теме
> в каком вопросе я не разобрался?
В вопросе построения обфусикаторов. В (23) тебе описали что надо. Решается все это весьма просто - берешь любой парсер 1С который тебе нравиться, или пишешь свой. Строишь по AST списки переходов, трансформируешь в новый автомат и на выходе - реально обфусицированный код. В котором никто даже разбираться не будет.

ОФФ -
Вот что мне нравиться в писателях всяких обфусикаторов - так это их непоколебимая уверенность что их код нужен кому-то, кроме них самих и одного/двух клиентов кому умудрились впарить свое творение.

cleaner_it; ElenaMikulina; igel9780; +3 4 Ответить
25. masterkio 334 23.12.15 16:09 Сейчас в теме
(24) so-quest,
В вопросе построения обфусикаторов. В (23) тебе описали что надо. Решается все это весьма просто - берешь любой парсер 1С который тебе нравиться, или пишешь свой. Строишь по AST списки переходов, трансформируешь в новый автомат и на выходе - реально обфусицированный код. В котором никто даже разбираться не будет.

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

ОФФ -
Вот что мне нравиться в писателях всяких обфусикаторов - так это их непоколебимая уверенность что их код нужен кому-то, кроме них самих и одного/двух клиентов кому умудрились впарить свое творение.


Не понимаю такой агрессии, если не нужен - так ок, а если нужен, то отдавать его просто так по меньшей мере глупо.

Разбираетесь в чем-то лучше? посоветуйте как лучше или просто промолчите. Зачем писать в какой-то уничижительной форме про других людей? Я думаю найдется куча народа, для которых и ваш код/работа/результаты труда будут никчемным.
Romyl01; Miket78; Алексей_mir2mb; 1sig; KSy; Serega-artem; Prad2002; dj_serega; Yulia_Bird; Ali1976; for_sale; ekaruk; CyberCerber; 1attimo; +14 Ответить
6. ixijixi 1775 22.12.15 08:40 Сейчас в теме
(2) Evil Beaver, Обфуска́ция — приведение исходного текста или исполняемого кода программы к виду, сохраняющему ее функциональность, но затрудняющему анализ, понимание алгоритмов работы и модификацию при декомпиляции. По моему, обработка подходит под определение.
8. alex_4x 85 22.12.15 10:47 Сейчас в теме
Для модулей форм просто надо добавить таблицу, в которую сам пользователь (ну тот кто шифрует) вносит переменные, используемые на форме и они не шифруются.
или другой вариант - после шифрации дается таблица, по которой эти реквизиты на форме руками переименовываются в "кривые" названия.
Конечно это не полная автоматизация но выход.
В твоей шифровалке обрабатываются дерективы препроцессора ?
поток выполнения может быть запутан ?

Хорошо бы порядок аргументов и их количество в вызываемых функциях менять, добавлять "контрольные" аргументы, при неправильном значении которых начинает происходить всякая дребедень - это будет некой защитой от отладки. Опять же область видимости переменных - с этим также можно устроить путаницу. так как в 1С нет ни строгой типизации типов - это еще один механизм, который можно применять для усложнения читаемости кода.
9. masterkio 334 22.12.15 12:36 Сейчас в теме
(8) alex_4x,
Для модулей форм просто надо добавить таблицу, в которую сам пользователь (ну тот кто шифрует) вносит переменные, используемые на форме и они не шифруются.

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

Такая таблица есть - кнопка "Посмотреть таблицу замены"

В твоей шифровалке обрабатываются дерективы препроцессора ?

Нет, а как и с какой целью их можно обрабатывать, не особо представляю.

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

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

добавлять "контрольные" аргументы
не очень понял, что это.

пять же область видимости переменных - с этим также можно устроить путаницу
тоже не очень понял, как это можно применить.
10. Yashazz 4709 22.12.15 16:43 Сейчас в теме
Согласен, не обфускация это в полном смысле слова. Вообще, интереснее всего делать такие преобразования, чтобы требовался некий "ключ", без которого код превращается в пусть и читабельную, но трудноотлаживаемую и незапускаемую "кашу". Т.е. потратив N времени, можно довести код до ума, но трудозатраты должны быть огромны. И вот элементарной заменой на этот ключ код превращался бы в работающий и правильный, вот это было бы круто.

А это - извините, и автору самому потом с таким невозможно работать.
11. masterkio 334 22.12.15 17:57 Сейчас в теме
(10) Yashazz, то о чем вы пишите, совсем другая задача, и не понятно зачем это нужно, если у разработчика просто есть исходник с нормальным текстом, а в поставку вы просто включаете испорченный код.
for_sale; +1 Ответить
84. for_sale 971 06.12.16 17:28 Сейчас в теме
(10), код, который превращается или не превращается в кашу - это уже компиляция налету. Т.е. Выполнить(). И тогда, во-первых, вы можете без всякой обфускации найти какую-то шифровалку строк с кодом доступа, даже в онлайне, а у себя в коде прописать функцию дешифрации и получить что-то вроде Выполнить(Дешифровать(Каша, Код)). Но во-вторых, любая такая дешифровка по коду доступа уже даёт любому купившему вашу нетленку возможность получить её чистенький код. А смысл обфускации как раз в том, чтобы сделать кашу, которая бы работала именно в виде каши, без всякой дешифровки.
12. logarifm 1117 23.12.15 00:04 Сейчас в теме
Хорошая идея, автору однозначно +
А идея насчет обратного прнобразования думаю тоже кто-то разработает, все в свое время...
u_n_k_n_o_w_n; +1 Ответить
13. МимохожийОднако 141 23.12.15 07:43 Сейчас в теме
(12) logarifm, всё гораздо проще. Для случаев разбора обработанного кода и необходимости правки вполне помогает отладчик, мозг и команда найти-заменить.
14. alex_sayan 23.12.15 09:48 Сейчас в теме
Интересно, и почему так много "больных" защитой своего кода разработчиков?
maksa2005; корум; dj_serega; Piskunov_VG; ture; stal76; pallid; Dr.ZIG; Accident; nikaleks; adelair; so-quest; kot26rus; Bell; Evil Beaver; +15 2 Ответить
15. Оберон 16 23.12.15 10:15 Сейчас в теме
(14) puzakov, потому что жадность!!!
maksa2005; rpgshnik; +2 Ответить
17. masterkio 334 23.12.15 11:33 Сейчас в теме
(14) puzakov, потому что много не порядочных внедренцев.
messagess; maksa2005; for_sale; 1v7; MRAK; +5 4 Ответить
32. antz 23.12.15 19:00 Сейчас в теме
(14) puzakov, многим стыдно за свой код.
maksa2005; Aquari; rpgshnik; KroVladS; корум; dj_serega; pbazeliuk; ipoloskov; for_sale; y22-k; lefthander; alekseineputin; Teut_Vlad; Accident; Захаров_Николай; so-quest; Bell; +17 Ответить
85. for_sale 971 06.12.16 17:30 Сейчас в теме
(14) а что вас смущает?

Есть разные схемы монетизации разработок. Работа на распиловом проекте очередной госкорпорации или допиливание отчётов для бухгалтера, чтобы вместо точек в цифрах были запятые - это ещё не вся жизнь программиста 1С. Есть вещи, которые предоставляются бесплатно, например, но монетизируются за счёт трафика. Или даже просто продаются конечному пользователю не за стоимость разработки, а гораздо ниже, но окупаемость достигается за счёт массовости.

И почему, спрашивается, я, потратив стотыщмиллионов часов на разработку, должен отдавать свой код любому, кто хочет продавать мой же товар в своей обёртке да ещё и этом составлять мне же конкуренцию?
PSKMOL; eeeio; +2 Ответить
86. for_sale 971 06.12.16 18:22 Сейчас в теме
(14) и, кстати, почему-то в других сферах и средах разработки это само собой разумеется - закрытый исходных код, а в 1С это считается "болезнью". Идиоты из микрософта, огрызка и прочих осей зла, видимо, не прониклись высокими идеалами 1С.
16. Трактор 1246 23.12.15 10:56 Сейчас в теме
15 лет назад я такой же хренью страдал. Потом понял, что всё фигня.
pallid; Bell; +2 Ответить
18. infostart user 20 23.12.15 11:54 Сейчас в теме
19. so-quest 140 23.12.15 11:57 Сейчас в теме
Такое через регэкспы еще лет пять назад делали.
Автор, твою бы энергию да в правильное русло... Эта задача проще решается через построение AST и последующий обход.

А самое интересное - когда сделаешь, приходит понимание что глупость это все... И тратить время на то что бы приводить код к нечитаемому виду - в принципе! не стоит. Слишком просто разбирается назад.

Построение преобразователя к конечному автомату - лучше, но дороже в исполнении, и там уже совсем другой объем знаний надо.

По парсерам если будут интересны наработки - смотри тут https://github.com/wwall/disa_da
Там правда все на 1С. что не совсем честно по отношению к быстродействию и анализу кода.
h00k; Evil Beaver; +2 Ответить
20. masterkio 334 23.12.15 12:13 Сейчас в теме
(19) so-quest,
А самое интересное - когда сделаешь, приходит понимание что глупость это все... И тратить время на то что бы приводить код к нечитаемому виду - в принципе! не стоит. Слишком просто разбирается назад.


Конечно разбирается, но тут то суть как правило в том, что трудоемкость, а как следствие стоимость этого обратного разбор больше, чем сам продукт.

Может, конечно это и ерунда все, но я для себя не нашел другого - бесплатного и простого способа хоть как-то защитить конфигурацию. А просто отдавать без защиты - лишать себя денег.
rolin555; Serega-artem; dj_serega; for_sale; DrVitaly; +5 Ответить
21. so-quest 140 23.12.15 12:23 Сейчас в теме
>как следствие стоимость этого обратного разбор больше, чем сам продукт.
Вы в принципе в вопросе не разобрались. Стоимость разбора вашего обработанного кода - ни о чем. Час работы на обход дерева, полчаса покурить. У вас ведь не меняется ничего, кроме синтаксического представления. Единственное чего нельзя будет восстановить - имена переменных и комментарии.
ZUL_MTFKA; +1 1 Ответить
22. masterkio 334 23.12.15 14:09 Сейчас в теме
(21) so-quest,
Вы в принципе в вопросе не разобрались
в каком вопросе я не разобрался?

Стоимость разбора вашего обработанного кода - ни о чем. Час работы на обход дерева, полчаса покурить. У вас ведь не меняется ничего, кроме синтаксического представления. Единственное чего нельзя будет восстановить - имена переменных и комментарии.


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

1.5 часа для, например Москвы, это уже ~ 3000 рублей, т.е. все что дешевле уже не оправданно даже пытаться декодировать.

Ну и, думаю, 1.5 часа это преувеличение, по крайней мере не каждый специалист сделает за такой срок. + там не только изменение синтаксического представления, есть и еще некоторые "запутки", пусть немного, но тоже усложнят дешифровку.
26. so-quest 140 23.12.15 16:32 Сейчас в теме
Я высказал свое мнение. Оно не совпало с вашим. В этом проявление агрессии? Насчет лучше или нет - да, в вопросах анализа кода и обфусикации разбираюсь лучше. И выше указал что ваша разработка - пустая трата времени. Вы не согласились и попытались отстоять свою точку зрения. Не получилось. Среагировали на ОФФ и решили перевести обсуждение в выяснение личных отношений. В связи с чем вопрос - где в моем поведении агрессия? Чем я так вас обидел? Считаете что ваша обработка нужна - хорошо. Не хотите ее обсуждать - пусть будет так.

Если обидел чем вас - простите. Не хотел я такого.
Еще раз - простите
27. masterkio 334 23.12.15 16:51 Сейчас в теме
Я высказал свое мнение. Оно не совпало с вашим. В этом проявление агрессии?
нет, конечно, только в том, что вы перешли на личности, написав что работа таких как я никому не нужна. Тут я с вами совершенно не согласен.

Насчет лучше или нет - да, в вопросах анализа кода и обфусикации разбираюсь лучше.
Именно это я и отметил, и признаю это.

И выше указал что ваша разработка - пустая трата времени.
нет не пустая, какая бы никчемная и глупая она ни была. + когда мне нужна была подобного рода штука, чтобы хоть как то защитить свой никому не нужный код, я не нашел НИЧЕГО (по крайней мере бесплатного), написанного людьми разбирающимися хорошо в этом вопросе, например, как вы. Нашел только обработку, которая выкладывалась тут же и она сделана в том же ключе как у меня, я занялся своей, т.к. в той не обрабатывался современный код и ее код был закрыт.
И я надеюсь что моя обработка помогла тем, кто ее скачал.

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

Среагировали на ОФФ и решили перевести обсуждение в выяснение личных отношений. В связи с чем вопрос - где в моем поведении агрессия? Чем я так вас обидел?
перешли на личности именно вы, и да, называть чью то работу никому не нужной (и вы говорили не о моей обработке, а о работе всех тех людей, которые пожелали ей воспользоваться) - это если не оскорбление, то неприятный выпад.

Ваш комментарий сначала посчитал самым полезным, вы предоставили некие наработки, давали реальные советы... а потом занялись каким-то само восхвалением...печально.
for_sale; +1 Ответить
49. Dach 372 24.12.15 23:46 Сейчас в теме
(27) речь про вот эту обработку?

http://infostart.ru/public/15907/

если про нее, то она прекрасно работает и с "современным" кодом.

Протестировал ради интереса буквально только что - не смогла только обработать тип ОписаниеОповещения.
Ну, неудивительно, это асинхронное выполнение кода, в рамках отказа от модальности, на момент написания обфускатора еще не применялось...
Неужели Ваш код содержит везде асинхронные вызовы? Или нет? Большинство внедренцев, из тех, от кого собственно и надо бы защищать свои творения - толком то и не знают что это. )))
Как ни навязывает 1С такой подход, не очень он приживается, потому что требует больший порог вхождения, чем прочтение Радченко по диагонали.
Но когда таки навяжут - будет хорошо, считаю, но это тема для отдельной дискуссии.

Кстати, у автора обработки все развилось в целый проект, видимо довольно успешный. Не сочтите за рекламу, но: https://netlenka1c.ru
(сейчас сервис платный, бесплатный был при старте, года 2 назад).

Если уж так нужно защитить свой код, то почему бы не купить абонемент? 4500 в год - не так уж дорого за возможность спать спокойно ;) ;)
А если не хочется покупать абонемент и хочется разработать свое, то воспринимайте критику... Вам Evil Beaver и остальные уже надавали кучу советов... Насчет GoTo и запутывания.

28. herfis 498 23.12.15 17:42 Сейчас в теме
А я вот не совсем понимаю, в чем смысл защиты обфусцированием вообще.
Защита авторских прав на код? Усложнить модифицирование кода?
Чтобы можно было "вот вам версия типа без исходников", а если захотите сами дорабатывать - доплатите?
Тут редкий раз вообще встретишь код, который можно дорабатывать без отвращения.
Да и нечасто это требуется, как мне кажется. Если речь об обработках, так 99% используют их as is.
С конфой, в принципе, тоже самое. Но конфу, если очень хочется, и так можно поставлять без исходников общих модулей, хотя опять таки непонятно - зачем.
Спрятать "гениальные" приемы программирования? Не смешите мои тапочки.
Чтобы кто-то не выдал твою конфу за свою? Это еще заслужить надо. Единицы добиваются такого ошеломительного успеха. И в этом случае доказать свое авторство обычно особой проблемы не составляет.
maksa2005; dj_serega; ZUL_MTFKA; kar911; Vovan1975; nSpirit2; for-elenak; Bell; +8 1 Ответить
29. masterkio 334 23.12.15 18:16 Сейчас в теме
(28) herfis,
Если кофа - то чем хуже поставка без исходных кодов?

я лично использую и то и другое, т.е. делаю код не читаемым и потом модуль не включаю.
for_sale; for-elenak; ixijixi; +3 Ответить
30. herfis 498 23.12.15 18:20 Сейчас в теме
(29) Простой вопрос - зачем?
31. herfis 498 23.12.15 18:25 Сейчас в теме
Хотя, если это работает как маркетинговый прием, тогда есть смысл.
Типа с исходниками, это "all inclusive" и поэтому дороже. И народ такой - цена вопроса небольшая, так зачем брать с урезанными возможностями?
Если это работает, тогда ладно.
hromovanton; +1 1 Ответить
34. masterkio 334 23.12.15 19:28 Сейчас в теме
(31) herfis,
Смысл простой.
Есть у вас дополнение к конфигурации, вы продаете ее за деньги, если ни как её не защитить, то один купивший может раздать ее всем своим знакомым, например, или если купил внедренец, то он может поставить ее многим клиентам получив за это деньги, а вам не достанется ничего.

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

maksa2005; Serega-artem; headMade; for_sale; biformatus; +5 Ответить
41. herfis 498 24.12.15 10:18 Сейчас в теме
(34) Что-что?? Защита пин-кодом в обфусцированном коде? Seriously? Небольшая защита? Выложи на спор такую "защиту", замерим время на "взлом". ИМХО, защита не лучше консервной банки. Пока содержимое не нужно - вполне себе защищает.
ЗЫ. Уточню свою мысль. С точки зрения защиты от несанкционированного выполнения кода, обфускация не дает ровным счетом НИЧЕГО. Кто утверждает обратное - не дружит с головой. Единственное, на что способна обфускация в принципе - защита авторских прав и некоторый уровень защиты от модификации кода.
igel9780; Vovan1975; +2 1 Ответить
42. masterkio 334 24.12.15 10:50 Сейчас в теме
(41) herfis,
Что-что?? Защита пин-кодом в обфусцированном коде? Seriously? Небольшая защита? Выложи на спор такую "защиту", замерим время на "взлом". ИМХО, защита не лучше консервной банки.

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

С точки зрения защиты от несанкционированного выполнения кода, обфускация не дает ровным счетом НИЧЕГО. Кто утверждает обратное - не дружит с головой. Единственное, на что способна обфускация в принципе - защита авторских прав и некоторый уровень защиты от модификации кода.

-она дает защиту модуля от модификации, в который можно встроить защиту от несанкционированного выполнения. Понятно, что не во всех случаях это возможно, но думаю для многих задач можно придумать такого рода защиту.
43. herfis 498 24.12.15 11:03 Сейчас в теме
(42)
в который можно встроить защиту от несанкционированного выполнения

Это иллюзия, которая не выдерживает банальной проверки здравым смыслом. Никаких навыков и опыта для этого не требуется. Можно вообще вчера 1С увидеть первый раз. Достаточно знать, что такое отладчик и азы информатики.
Ну подумайте сами. Вы видите, что на определенном этапе выскакивает проверка пин-кода. Модуль где это происходит, хотя бы корневой - очевиден. Включаете пошаговую отладку и просто идете пока не выскочит окошко. С этого момента отследить, как дальше проходит алгоритм проверки и воткнуть его обход - ничего не стоит.
igel9780; Vovan1975; +2 1 Ответить
44. masterkio 334 24.12.15 11:28 Сейчас в теме
(43) herfis,
Ну подумайте сами. Вы видите, что на определенном этапе выскакивает проверка пин-кода. Модуль где это происходит, хотя бы корневой - очевиден. Включаете пошаговую отладку и просто идете пока не выскочит окошко. С этого момента отследить, как дальше проходит алгоритм проверки и воткнуть его обход - ничего не стоит.

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

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

Так что то, что вы пишите не совсем верно, опять же все сводится к взлому модуля.
46. herfis 498 24.12.15 14:17 Сейчас в теме
(44)
все сводится к взлому модуля

Вот именно! Вернее, не к взлому, а к обратной трансляции байт-кода в код 1С.
Именно об этом я и говорю. Если уже используется поставка без исходных кодов, ваш вариант обфускации - абсолютно лишний. Он ничего не привносит, с какой стороны не глянь.
При самостоятельном применении защиту от несанкционированного выполнения обфускация тоже не помогает реализовать.
Ее имеет смысл использовать только в качестве некоторой защиты от изменений и авторских прав.
33. adhocprog 1139 23.12.15 19:20 Сейчас в теме
35. so-quest 140 23.12.15 21:21 Сейчас в теме
>а потом занялись каким-то само восхвалением...печально.
Печально что вы так и не поняли о чем же тут вам говорили Для вас обфусикация - это маленькие желтые кругляшки именуемые деньгами. Но ни как не часть достаточно большой и интересной математической дисциплины о компиляции и анализе. Приложив хоть немного усилий к изучению которой вы бы добились больших результатов.
Но ведь некогда... Какой-то подлый внедренец именно сейчас ворует ваш гениальный код и из-под полы в переходе метро продает его. И только вы можете с этим боротьбся. И только обфусикация кода с этим справиться.

тьфу. Теорема БЖ-Соболя в действии



igel9780; Vovan1975; +2 1 Ответить
37. masterkio 334 23.12.15 21:53 Сейчас в теме
(35) so-quest, по-моему вас вообще не туда понесло... :)
51. so-quest 140 25.12.15 12:17 Сейчас в теме
(37) сложно что либо объяснять человеку, если кроме слова деньги он ничего не понимает. Тебе 40 постов пытаюсь объяснить что твоя обработка фигня бесполезная - ты упираешься в то что она якобы работает и даже от чего-то защищает. Тебе говорят как надо делать такой продукт - ты упираешься и говоришь что и так хорошо.
(48) dgolovanov, А как коррелирует между собой сексуальная привлекательность и вопросы по этой обработке? herfis вполне нормальные вопросы задает. То что автор на них ответить не может и юлит - по моему никак не связано с женщинами вообще.
(50) alex_4x, То что ты показываешь - не проблема. Сперва делается проход препроцессором, затем собственно парсер. То есть парсеров должно быть 2. Один для препроцессора, второй для самого языка.
Если тебе что нужно подсказать по статанализу кода- идешь сюда - https://github.com/wwall/drracket-loxy (парсер и пример простого анализа после новогодних будет там). Если просто парсер нужен - то сюда http://oscript.io/ или сюда - https://github.com/wwall/disa_da
58. Evil Beaver 8107 30.12.15 16:00 Сейчас в теме
(35) so-quest, а посоветуйте мне, коллега, хорошую литературу по анализу кода, а? Если не затруднит, конечно.
И за ссылку на oscript.io, отдельное спасибо, мне лестно :)
36. slawanix 9 23.12.15 21:35 Сейчас в теме
Я конечно понимаю, жадность там и все такое. Но когда такое делается в среде, изначально ориентированной на открытый код и возможность доработки любой конфигурации сторонними программистами... Ну вот тогда я не очень понимаю. Интересно, веб-разработчики свой код на яве и пхп тоже так стремятся защищать?
38. masterkio 334 23.12.15 21:56 Сейчас в теме
(36) slawanix,
но ведь 1С не бесплатный продукт, если бы они дали возможность защищать свои разработки без закрытия кода, его бы не надо было закрывать.
Почти все партнерские решения имеют закрытый код, такова реальность.
for_sale; +1 Ответить
39. slawanix 9 24.12.15 00:05 Сейчас в теме
(38) ну допустим я согласен с тем, что разработчики отраслевых конфигураций, с действительно оригинальными решениями, защищают свой продукт ключами, е-токенами и т.д. Но, если ты работаешь у франча, пишешь всякие там обработки на каждый день, отчеты и печатные формы... Не пойму, что действительно есть такая потребность в обфускации. Не догоняю, не опытный я в этих делах. Может подскажете, когда такая потребность возникает? И вот это вот:
Почти все партнерские решения имеют закрытый код, такова реальность.
Они поставляют конфигурации с закрытым или с обфуксированным кодом? Ведь это разные вещи.
40. masterkio 334 24.12.15 09:43 Сейчас в теме
(39) slawanix,
Наверно, каждый сам определяет для чего ему это надо .
Для меня
Но, если ты работаешь у франча, пишешь всякие там обработки на каждый день, отчеты и печатные формы... Не пойму, что действительно есть такая потребность в обфускации
- в этом случае не вижу смысла, скорее это даже вред и противоречие этике внедренцев/разработчиков 1С.

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

Они поставляют конфигурации с закрытым или с обфуксированным кодом? Ведь это разные вещи.
- цель одна, скрыть от возможности редактирования часть кода. Просто обфускация + не включение модуля в поставку - это, пусть самая не надежная, но доступная и бесплатная возможность это сделать. Все остальные способы защиты, как правило, требуют дополнительных финансовых затрат.
87. for_sale 971 06.12.16 18:42 Сейчас в теме
(36)
Но когда такое делается в среде, изначально ориентированной на открытый код и возможность доработки любой конфигурации сторонними программистами



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


(36)
Интересно, веб-разработчики свой код на яве и пхп тоже так стремятся защищать?


не поверите, но во всех сферах и средах это стандартная ситуация - закрытый исходный код. И только 1С, а за ней и гениальные программисты 1С, как обычно, имеют на всё своё особое мнение, которое, как обычно, не очень много общего имеет с реальностью. Напишите в Майкрософт, пусть вам исходники винды вышлют. Или каких-нибудь энгрибёрдс. Ну чтобы вы просто скомпилировали и пользовались бесплатно, да ещё и другим продавали.

И там как раз другая ситуация - там, если ты хочешь, можешь отдельно поставлять исходники, тебе никто не запрещает. А ВЫНУЖДАТЬ поставлять исходники - ну это как обычно 1С-стайл.

Ну и как всегда интересна вообще психология людей на форумах. Человек разработал вещь, довольно неплохую. В комментариях - ни одного дельного совета, ни одного дельного замечания и подсказки. Одни говном поливают, другие своё "фе!" самой идее высказывают, третьим интересно, как это вообще люди существуют, которым нужно то, что не нужно им самим?
94. Vovan1975 13 12.12.16 13:34 Сейчас в теме
(87)
не поверите, но во всех сферах и средах это стандартная ситуация - закрытый исходный код.


ну зачем врать? Опенсорсного софта - навалом. Вон тот же линукс на память первым приходит. Никакой "стандартной ситуации" нет.
корум; +1 1 Ответить
95. for_sale 971 22.03.17 17:07 Сейчас в теме
(94) вы вначале вникните в суть сказанного мной, а потом обвиняйте меня во лжи. Я что, сказал, что нет опенсорсного софта? Я сказал, что в нормальных сферах и средах, в отличие от 1С, ЕСТЬ ВСЁ НЕОБХОДИМОЕ для поставки скомпилированных программ без исходного кода. Что из этого - враньё?

И другой вопрос - а наличие линукса и другого опенсорса отменяет наличие ещё большего количества программ с закрытым исходным кодом?
45. alex_4x 85 24.12.15 13:30 Сейчас в теме
Мне кажется морально-этические нормы и цели обфускации кода - это отдельная тема, а техническая реализация - совсем другая тема. И зачем их обсуждать одновременно - непонятно.
Предположим нужно сделать реально недекомпилируемый, не поддающийся анализу техническими средствами код 1С.
Какие этапы для этого нужно выполнить, чтобы:
1. Гарантировать работоспособность этого кода (как минимум - не внесение новых ошибок, а лучше - контроль возможных ошибок перед модификацией и не добавление новых)
2. Обеспечить высокую сложность автоматического анализа

Для выполнения первого пункта хорошо бы сначала, перед тем как формировать некий обфусцированный код, провести статический анализ того кода, который есть изначально. Есть же статические анализаторы для С например, они проверяют такие вещи как определение переменных, которые не используются, условия, которые всегда будут иметь одно и то же значение
А=Б; Если А=Б Тогда.... Циклы, из которых по определению никогда не выйдем... Для А < Б Цикл .... А=0 КонецЦикла, и множество потенциальных угроз. Статический анализ не гарантированно найдет все ошибки, но укажет потенциально небезопасные участки кода. Конечно это лучше работает в тех языках, где есть обязательное определение переменных и что мне кажется важнее - чёткая типизация переменных. В 1С поскольку нет строгой типизации переменных - ошибка, когда например А = 3, а потом А.Записать() - вроде как и не очевидна, только на этапе выполнения будет понятно, что для А - метода Записать() нет, так как это числовая переменная. И никто не мешает сделать А = 3; А = справочник.фигня.НайтиПоКоду(А); А.Записать(); Вот статический анализ бы мог тут пригодиться не только для написания обфускатора, а просто для анализа кода на возможные ашипки и очепятки.
Вот мне лично было бы более интересно поговорить именно о статическом анализе кода 1С, но это в то же время и шаг к качественной обфускации.
После всестороннего синтаксического анализа появляется граф вызовов функций (встроенных функций языка, функций и процедур модуля, других модулей). И этот граф уже можно модифицировать, разбавляя его бессмыслеными и запутанными конструкциями. Главное, что после этого мы опять же можем с применением ранее созданного статического анализатора проверить работоспособность нашего уже измененного кода. Изменение кода в данном случае - это не замена понятных названий на непонятные, а добавление логических конструкций, изменение порядка и состава аргументов, хранение переменных в усложненных для прямого контроля структурах (например переменные хранятся в стеке или массиве, динамически там перемешиваются, сведения о том какая переменная будет извлечена уже не функция от её названия, а нечто гораздо более сложное).
masterkio; +1 Ответить
47. herfis 498 24.12.15 14:23 Сейчас в теме
Мне кажется морально-этические нормы и цели обфускации кода - это отдельная тема, а техническая реализация - совсем другая тема. И зачем их обсуждать одновременно - непонятно.

Ну а мне непонятно, почему вы считаете странным обсуждать в комментариях к продукту его целевое назначение.
48. dgolovanov 24.12.15 18:33 Сейчас в теме
(47) herfis, прочитал все ваши комменты. Вам женщины не дают, всё в слова выливается?
Award; lefthander; MRAK; teflon; +4 1 Ответить
53. herfis 498 28.12.15 10:40 Сейчас в теме
(48) Кто о чем, а вы про "женщины не дают". Напомнили старую русскую поговорку про баню.
50. alex_4x 85 25.12.15 10:06 Сейчас в теме
Интересно не "купить абонемент", а сделать самому :-)
Я с автором нетленки общался, но так как проект у него коммерческий, он даже по поводу разбора синтаксиса языка ничего не стал подсказывать. Ну это понятно, всё что приносит доход - ноу хау :-) Как я уже писал выше - мне интересно на данном этапе сделать статический анализатор кода.

Вот вам одна смешная конструкция, для раздумий :-)

//Дерективы компилятора можно так поставить что например 
Функция
//....
#Для тонкого клиента
//...
КонецФункции
#Для толстого клиента
//...
КонецФункции
//Проверку синтаксического контроля не проходит, но работает :-)
Показать
52. alex_4x 85 25.12.15 14:33 Сейчас в теме
Ну что вы, уважаемый so-quest так накинулись на парня! Он же не заставляет вас своей обработкой пользоваться. Ну сделал человек эксперимент, ему и обсудить это хочется и поддержку найти, а вы тут как научный руководитель в институте - всё у вас неправильно, идите перечерчивайте...

Как вашим анализатором drracket-loxy пользоваться ? на чём это написано ? какая-то непонятная для меня мешанина файлов....
http://oscript.io/ - я так понимаю на сях написан. И как это работает ? Ему надо что скармливать ? Модуль один или весь файл метаданных?

59. Evil Beaver 8107 30.12.15 16:04 Сейчас в теме
(52) alex_4x,
http://oscript.io/ - я так понимаю на сях написан. И как это работает ?


А никак не работает. Это не парсер, а среда исполнения. В ней нет отчуждаемого анализатора кода, который можно просто взять и для обфускатора заюзать. Написан на C# - это сильно проще, чем С.
54. alex_4x 85 29.12.15 10:21 Сейчас в теме
herfis, дорогой, ну не устраивайте тут помойку из придирок.
Давайте лучше по существу.
Кто знает как сделать или уже сделал разбор кода 1С на самом 1С ? Понятное дело есть всякие специфические библиотеки, но давайте ограничимся функционалом 1С для удобства и понятности.
55. herfis 498 29.12.15 11:00 Сейчас в теме
(54) alex_4x, Если нет теоретической базы, то анализ готового кода, опирающегося на глубокую теорию - дело неблагодарное. Набираете в поисковике "написание компилятора" и легко выуживаете кучу профильной литературы по теории компиляторов, в т.ч. синтаксическому/семантическому анализу исходных текстов, конечным автоматам и т.п. Всё это изучается в рамках обучения системному программированию, в т.ч. написание собственных компиляторов. Это ответ на вопрос "как сделать". Лично я ничего такого на 1С не делал и врядли буду. Но препятствий никаких нет. Берете и делаете.
Vovan1975; +1 2 Ответить
56. alex_4x 85 29.12.15 13:45 Сейчас в теме
herfis, спасибо за ваш полный сарказма и снобства совет. жаль что в нём нет даже намека на смысл.
Теории - это всё замечательно, и конечные автоматы тоже. Как это всё реализовать на практике - вот вопрос.

Анекдот...
-Мама, вы хотите рыбы?
-Ммм... ну да...
-Ну так идите, купите и пожарьте!

Теоретическая база такова:
Так как программа на языке 1С по разному отрабатывается в разных режимах (на клиенте, на сервере, толстый клиент, com соединение), что обусловлено применением деректив компилятора, сначала надо из исходного кода выделить ту часть, которая будет отрабатываться в интересующем нас случае. Например на клиенте. Остальное просто выбросить.
Далее модуль состоит из частей:
Определение переменных
Определение функций и процедур
Тело модуля (аналог функции main())
Сначала определяем все глобальные переменные модуля.
Встречаем начало объявления функции - запоминаем что началась функция и дальше идут сначала параметры потом тело функции
Встречаем конецфункции - функция закончилась.
Внутри функции(процедуры) - в начале определяются переменные функции(процедуры), потом идет тело функции.
Тело состоит из вызовов процедур
ИмяПроцедуры(Параметры); Параметры - это список Выражений через запятую
И присвоений
ИмяПеременной = Выражение


Вот и вся теоретическая база. Или я глубоко заблуждаюсь ?
57. so-quest 140 29.12.15 15:34 Сейчас в теме
(56) alex_4x, Очень глубоко заблуждаетесь, начиная со слова "Анекдот"
Конечные автоматы, теория построения компиляторов и прочая прикладная математика необходима. Хотя если вы хотите повторить путь пройденый до вас и не достичь ничего нового - то не обязательно. Если вы откажетиесь от этого - поучитсья примерно то же самое что и у автора этой разработки - тяжелый, трудночитаемый, неподдерживаемый код. Без формальной грамматики языка - ничего не сделать. Точнее можно сделать, но будет очень грустно это читать/развивать.

По поводу вашего вопроса "Как вашим анализатором drracket-loxy пользоваться ?" - пока никак. Это начинающийся проект. на данный момент там реализован только токенизире и интерфейс анализа потока токенов. Ссылку дал что бы вы могли посмотреть на один из вариантов реализации статического анализа кода. Аналогичные проекты есть для питона, джавы, сишарпа и прочих языков. У моего проекта язык реализции - schema (точнее drracket). Перегнать на 1С - труда не составит, там никаких сложных конструкций не используется.
60. nikaleks 5 06.01.16 18:24 Сейчас в теме
Ребята, а зачем это нужно?
Выкладывая обработку на открытом источнике, думать о непорядочных внедренцах? ерунда какая-то.
Если уж так нужно, можно паролем защитить модуль, а так ерунда какая-то.
61. CyberCerber 852 09.01.16 23:43 Сейчас в теме
Автор, спасибо за обработку!

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

Но есть некоторые замечания, ошибки:

1. Именно, защитный код, который нужен был мне, скрылся плохо. Т.е. код
Если ТекущаяДата() > '20160101' Тогда
    Возврат;
КонецЕсли;

таким же и остался.

2. Возникает ошибка с директивами препроцессора. Код вида:
#Если Клиент Тогда
#КонецЕсли

должен занимать отдельные строчки, а он идет в середине строки.

3. Проблема с переменной в модуле обработки, которая является реквизитом обработки
Например, есть реквизит обработки "Реквизит1". В одном методе пишу:
Реквизит1 = 1;

А в другом:
Сообщить(Реквизит1);

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

Желаю исправления этих ошибок и дальнейшего развития обработке!
62. masterkio 334 10.01.16 11:25 Сейчас в теме
(61) CyberCerber,
Первые две проблемы понятны, постараюсь исправить в ближайшее время.

По поводу третьей не очень понял.
Если это одна и та же переменная или просто с одинаковым идентификатором, то если они заменяются на другое , не читаемое имя переменной, все равно все должно работать...
63. CyberCerber 852 10.01.16 11:57 Сейчас в теме
(62) Реквизит1 - это реквизит самой обработки, он не задан в коде внутри модуля, а добавлен в окне создания обработки. Такую переменную не надо переименовывать.
64. Evil Beaver 8107 10.01.16 19:51 Сейчас в теме
(63) CyberCerber, по вашей задаче - не парьтесь и просто закройте код модуля паролем (или вообще не включайте код в поставку).
66. CyberCerber 852 10.01.16 22:27 Сейчас в теме
(64) Evil Beaver, пароль, слышал, вскрывается проще простого. А вот про поставку мало знаю... Этот метод можно применить к внешней обработке?
68. ekaruk 4896 10.01.16 22:57 Сейчас в теме
(66) CyberCerber, Можно применить к отчету, но для этого его нужно встроить в конфигурацию.
Как вариант, можете ограничиться обфускацией текста обработкой в этой публикации + обычный пароль.
Для пользователя этого более чем достаточно.
69. CyberCerber 852 11.01.16 10:11 Сейчас в теме
(68) ekaruk, так и сделал: обфусцировал и паролем закрыл. Но решил, гулять так гулять, и хотел всеми стандартными способами воспользоваться. :-)
72. Evil Beaver 8107 12.01.16 01:39 Сейчас в теме
(66) CyberCerber, про пароль я не интересовался, по-моему он не очень просто снимается. А вот декомпилировать обратно можно, да. Но awa, например, знает, как защитить от декомпиляции. Имхо, это надежнее, чем просто замена идентификаторов.
67. masterkio 334 10.01.16 22:41 Сейчас в теме
(63) CyberCerber, Понятно, эта проблема уже обсуждалась. Постараюсь ее как-нибудь решить.
73. masterkio 334 21.01.16 22:37 Сейчас в теме
(61) CyberCerber, По вашим вопросам вроде бы поправил. Публикация обновлена.
Единственное с литералами даты не стал заморачиваться, но сделал, что в строковых константах цифры кодируются, т.е. если в вашем случае написать Дата("20160101"), то в явном виде её видно не будет.
65. ekaruk 4896 10.01.16 20:45 Сейчас в теме
На самом деле закрытие кода вещь достаточно полезная.
Я сама всегда рассказывала, что в 1С закрытого кода быть не должно.
Сейчас сама использую для закрытия и урезания функционала бесплатной Лайт версии платного отчета.
Это позволяет без особого труда дать пользователю облегченную версию, чтобы показать, что именно отчет может.
Поставка без кода + легкая обфускация байт-кода.
По моей оценке, 95% программистов Инфостарта такую защиту за срок меньше недели не откроют, не говоря уже о рядовых бухгалтерах.
А те 5%, что откроют, такой фигней заниматься не будут.
Miket78; dj_serega; MRAK; Dach; teflon; CyberCerber; +6 Ответить
70. izidakg 170 12.01.16 00:31 Сейчас в теме
исключение модуля очень фиговая защита
лично я ее вскрываю ровно за время открытия соответствующего инструмента
71. ekaruk 4896 12.01.16 00:34 Сейчас в теме
(70) izidakg, Для рядового пользователя этого более чем достаточно.
74. master-73 4 25.01.16 16:02 Сейчас в теме
Ошибка. Если в модуле присутствует примерно такая строка:
ОбластьПодвал = Макет.ПолучитьОбласть("Подвал|_" + Ширина);
76. masterkio 334 28.01.16 08:54 Сейчас в теме
(74) master-73, Проверю, спасибо за замечание.
75. MRAK 723 27.01.16 20:46 Сейчас в теме
Автор, молодец.
Не слушай недальновидных коллег, которые пишут, что продукт не нужен. Они просто не сталкивались с ситуацией, где данный инструмент может быть полезен.
Если кому-то не разу не приходилось сверлить стены, то он тоже будет утверждать, что дрель не нужна, и кто ее изобрел - тот дурак :)
Не стоит на таких людей излишне обращать внимание :)
Miket78; teflon; masterkio; +3 Ответить
77. capitan 2466 29.02.16 14:57 Сейчас в теме
Задумка хорошая.
Но у меня не взлетела.
Появляются строки типа:
структура ( sdferwrrwerwrwer("҄ҙқҧҟҰҦҔҦ
Они видны и на принтскрине автора.
На них - затык, модуль не компилируется без ошибок.
А http://infostart.ru/public/15907/ работает на ура.
78. masterkio 334 29.02.16 20:50 Сейчас в теме
(77) capitan, если есть возможность, пришлите пример кода, который не компилируется.
79. FractonKireyev 31.05.16 15:03 Сейчас в теме
Я наткнулся на ошибку. Обработка не любит тройные кавычки. Текст модуля
Процедура Контроль( Источник, Отказ, ЗаголовокОшибки ) Экспорт
	Если Источник.УчитыватьНДС Тогда
		ОбщегоНазначения.СообщитьОбОшибке( "Установлена форма оплаты перевозчику """ + Строка( Источник.ФормаОплатыПеревозчику ) +
			""". В этом случае обязателен сброс признака ""Учитывать НДС"".", Отказ, ЗаголовокОшибки );
	КонецЕсли;
КонецПроцедуры

превращается в код
процедура контроль ( источник , отказ , заголовокошибки ) экспорт если источник.учитыватьндс 
 тогда общегоназначения.сообщитьобошибке ( sdferwrrwerwrwer("҇ҥҦҔҡҢҖҟҙҡҔ ҨҢҤҠҔ ҢңҟҔҦү ңҙҤҙҖҢқҫҜҞҧ """) + строка ( источник.формаоплатыперевозчику 
 ) + ""sdferwrrwerwrwer(". Ѷ ұҦҢҠ ҥҟҧҫҔҙ ҢҕҳқҔҦҙҟҙҡ ҥҕҤҢҥ ңҤҜқҡҔҞҔ ""҇ҫҜҦүҖҔҦҰ ҁѸ҅"".") , отказ , заголовокошибки ) ; конецесли ; конецпроцедуры 
  функция sdferwrrwerwrwer(Знач jhkkljhasdflkhjshafdk)  skfjasdfu = Новый Структура("s48,s49,s50,s51,s52,s53,s54,s55,s56,s57,s97,s98,s99,s100,s101,s102,s103,s104,s105,s106,s107,s108,s109,s110,s111,s112,s113,s114,s115,s116,s117,s118,s119,s120,s121,s122,s65,s66,s67,s68,s69,s70,s71,s72,s73,s74,s75,s76,s77,s78,s79,s80,s81,s82,s83,s84,s85,s86,s87,s88,s89,s90,s1040,s1041,s1042,s1043,s1044,s1045,s1046,s1047,s1048,s1049,s1050,s1051,s1052,s1053,s1054,s1055,s1056,s1057,s1058,s1059,s1060,s1061,s1062,s1063,s1064,s1065,s1066,s1067,s1068,s1069,s1070,s1071,s1072,s1073,s1074,s1075,s1076,s1077,s1078,s1079,s1080,s1081,s1082,s1083,s1084,s1085,s1086,s1087,s1088,s1089,s1090,s1091,s1092,s1093,s1094,s1095,s1096,s1097,s1098,s1099,s1100,s1101,s1102,s1103,s10","ø","ù","ú","û","ü","ý","þ","ÿ","Ā","ā","ĩ","Ī","ī","Ĭ","ĭ","Į","į","İ","ı","IJ","ij","Ĵ","ĵ","Ķ","ķ","ĸ","Ĺ","ĺ","Ļ","ļ","Ľ","ľ","Ŀ","ŀ","Ł","ł","ĉ","Ċ","ċ","Č","č","Ď","ď","Đ","đ","Ē","ē","Ĕ","ĕ","Ė","ė","Ę","ę","Ě","ě","Ĝ","ĝ","Ğ","ğ","Ġ","ġ","Ģ","Ѵ","ѵ","Ѷ","ѷ","Ѹ","ѹ","Ѻ","ѻ","Ѽ","ѽ","Ѿ","ѿ","Ҁ","ҁ","҂","҃","҄","҅","҆","҇","҈","҉","Ҋ","ҋ","Ҍ","ҍ","Ҏ","ҏ","Ґ","ґ","Ғ","ғ","Ҕ","ҕ","Җ","җ","Ҙ","ҙ","Қ","қ","Ҝ","ҝ","Ҟ","ҟ","Ҡ","ҡ","Ң","ң","Ҥ","ҥ","Ҧ","ҧ","Ҩ","ҩ","Ҫ","ҫ","Ҭ","ҭ","Ү","ү","Ұ","ұ","Ҳ","ҳ","ٿ"); 
 Для каждого sdskfjasdfu из skfjasdfu Цикл jhkkljhasdflkhjshafdk = СтрЗаменить(jhkkljhasdflkhjshafdk,sdskfjasdfu.Значение,Символ(Число(СтрЗаменить(sdskfjasdfu.Ключ,"s","")))); 
 КонецЦикла; jhkkljhasdflkhjshafdk = СтрЗаменить(jhkkljhasdflkhjshafdk,"|"," "); возврат jhkkljhasdflkhjshafdk; 
 КонецФункции

Это видно картинке во вложении. Ошибка в результирующем коде возникает в строке 3, позиция 8. Здесь виден фрагмент кода
 ) + ""sdferwrrwerwrwer(". 
, который никак не может быть правильным.

И одно пожелание. Хочется сделать отдельную настройку возле "Вставлять ничего не значащий код" для параметров функции (в моём примере это "Источник, Отказ, ЗаголовокОшибки"), чтобы параметры автоматически тоже проходили (или не проходили) обфускацию. В идентификаторах для замены в больших модулях надо слишком много щёлкать мышкой, чтобы снять все флажки с параметров, а этой настройкой можно будет управлять всеми флажками для параметров одновременно.
Прикрепленные файлы:
80. vasyS 30.08.16 11:12 Сейчас в теме
При запуске обработке вылетает куча ошибок. Что не так?

{ВнешняяОбработка.СтайерОбфускацияКода.Форма.Форма.Форма(301,61)}: Переменная не определена (НаправлениеПоиска)
ПозицияНачалоПеременной = СтрНайти(стрОбработанныйКод," ",<<?>>НаправлениеПоиска.СКонца,ПозицияПеременная,2);
{ВнешняяОбработка.СтайерОбфускацияКода.Форма.Форма.Форма(412,62)}: Переменная не определена (НаправлениеПоиска)
ПредПозицияТочкиЗапятой = СтрНайти(стрОбработанныйКод,";",<<?>>НаправлениеПоиска.СКонца,ТекПозицияТочкиЗапятой-1);
{ВнешняяОбработка.СтайерОбфускацияКода.Форма.Форма.Форма(413,61)}: Переменная не определена (НаправлениеПоиска)
ПредПозицияПерем = СтрНайти(стрОбработанныйКод," перем ",<<?>>НаправлениеПоиска.СКонца,ТекПозицияТочкиЗапятой-1);
{ВнешняяОбработка.СтайерОбфускацияКода.Форма.Форма.Форма(75,21)}: Процедура или функция с указанным именем не определена (СтрНайти)
ПозицияКавычек1 = <<?>>СтрНайти(стрОбработанныйКод,"""",,ТекущаяПозицияПоиска);
{ВнешняяОбработка.СтайерОбфускацияКода.Форма.Форма.Форма(76,21)}: Процедура или функция с указанным именем не определена (СтрНайти)
ПозицияКавычек2 = <<?>>СтрНайти(стрОбработанныйКод,"""",,ТекущаяПозицияПоиска,2);
{ВнешняяОбработка.СтайерОбфускацияКода.Форма.Форма.Форма(130,8)}: Процедура или функция с указанным именем не определена (СтрНайти)
Если <<?>>СтрНайти(стрОбработанныйКод," ") = 0 Тогда
{ВнешняяОбработка.СтайерОбфускацияКода.Форма.Форма.Форма(150,20)}: Процедура или функция с указанным именем не определена (СтрНайти)
ПозицияФункция = <<?>>СтрНайти(стрОбработанныйКод," функция ",,ТекущаяПозицияПоиска);
{ВнешняяОбработка.СтайерОбфускацияКода.Форма.Форма.Форма(158,30)}: Процедура или функция с указанным именем не определена (СтрНайти)
ПозицияКонцаИмениФункции = <<?>>СтрНайти(стрОбработанныйКод,"(",,ПозицияФункция)-1;
{ВнешняяОбработка.СтайерОбфускацияКода.Форма.Форма.Форма(159,35)}: Процедура или функция с указанным именем не определена (СтрНайти)
ПозицияКонцаПеременныхФункции = <<?>>СтрНайти(стрОбработанныйКод,")",,ПозицияФункция);
{ВнешняяОбработка.СтайерОбфускацияКода.Форма.Форма.Форма(165,20)}: Процедура или функция с указанным именем не определена (СтрНайти)
ПозицияЭкспорт = <<?>>СтрНайти(стрОбработанныйКод," экспорт ",,ПозицияФункция)-1;
{ВнешняяОбработка.СтайерОбфускацияКода.Форма.Форма.Форма(175,21)}: Процедура или функция с указанным именем не определена (СтрНайти)
ПозицияЗапятой = <<?>>СтрНайти(СтрокаПараметрыФункции,",");
{ВнешняяОбработка.СтайерОбфускацияКода.Форма.Форма.Форма(189,9)}: Процедура или функция с указанным именем не определена (СтрНайти)
Если <<?>>СтрНайти(ИмяПараметра,"=") > 0 Тогда
{ВнешняяОбработка.СтайерОбфускацияКода.Форма.Форма.Форма(190,37)}: Процедура или функция с указанным именем не определена (СтрНайти)
ИмяПараметра = Лев(ИмяПараметра,<<?>>СтрНайти(ИмяПараметра,"=")-1);
{ВнешняяОбработка.СтайерОбфускацияКода.Форма.Форма.Форма(208,20)}: Процедура или функция с указанным именем не определена (СтрНайти)
ПозицияФункция = <<?>>СтрНайти(стрОбработанныйКод," процедура ",,ТекущаяПозицияПоиска);
{ВнешняяОбработка.СтайерОбфускацияКода.Форма.Форма.Форма(216,30)}: Процедура или функция с указанным именем не определена (СтрНайти)
ПозицияКонцаИмениФункции = <<?>>СтрНайти(стрОбработанныйКод,"(",,ПозицияФункция)-1;
{ВнешняяОбработка.СтайерОбфускацияКода.Форма.Форма.Форма(217,35)}: Процедура или функция с указанным именем не определена (СтрНайти)
ПозицияКонцаПеременныхФункции = <<?>>СтрНайти(стрОбработанныйКод,")",,ПозицияФункция);
{ВнешняяОбработка.СтайерОбфускацияКода.Форма.Форма.Форма(223,20)}: Процедура или функция с указанным именем не определена (СтрНайти)
ПозицияЭкспорт = <<?>>СтрНайти(стрОбработанныйКод," экспорт ",,ПозицияФункция)-1;
{ВнешняяОбработка.СтайерОбфускацияКода.Форма.Форма.Форма(233,21)}: Процедура или функция с указанным именем не определена (СтрНайти)
ПозицияЗапятой = <<?>>СтрНайти(СтрокаПараметрыФункции,",");
{ВнешняяОбработка.СтайерОбфускацияКода.Форма.Форма.Форма(247,9)}: Процедура или функция с указанным именем не определена (СтрНайти)
Если <<?>>СтрНайти(ИмяПараметра,"=") > 0 Тогда
{ВнешняяОбработка.СтайерОбфускацияКода.Форма.Форма.Форма(248,37)}: Процедура или функция с указанным именем не определена (СтрНайти)
ИмяПараметра = Лев(ИмяПараметра,<<?>>СтрНайти(ИмяПараметра,"=")-1);
{ВнешняяОбработка.СтайерОбфускацияКода.Форма.Форма.Форма(265,23)}: Процедура или функция с указанным именем не определена (СтрНайти)
ПозицияПеременной = <<?>>СтрНайти(стрОбработанныйКод," перем ",,ТекущаяПозицияПоиска);
{ВнешняяОбработка.СтайерОбфускацияКода.Форма.Форма.Форма(273,28)}: Процедура или функция с указанным именем не определена (СтрНайти)
ПозицияКонцаПеременной = <<?>>СтрНайти(стрОбработанныйКод,";",,ПозицияПеременной)-1;
{ВнешняяОбработка.СтайерОбфускацияКода.Форма.Форма.Форма(278,8)}: Процедура или функция с указанным именем не определена (СтрНайти)
Если <<?>>СтрНайти(ИмяПеременной," экспорт ") > 0 Тогда
{ВнешняяОбработка.СтайерОбфускацияКода.Форма.Форма.Форма(295,23)}: Процедура или функция с указанным именем не определена (СтрНайти)
ПозицияПеременная = <<?>>СтрНайти(стрОбработанныйКод,"=",,ТекущаяПозицияПоиска);
{ВнешняяОбработка.СтайерОбфускацияКода.Форма.Форма.Форма(301,29)}: Процедура или функция с указанным именем не определена (СтрНайти)
ПозицияНачалоПеременной = <<?>>СтрНайти(стрОбработанныйКод," ",НаправлениеПоиска.СКонца,ПозицияПеременная,2);
{ВнешняяОбработка.СтайерОбфускацияКода.Форма.Форма.Форма(316,11)}: Процедура или функция с указанным именем не определена (СтрНайти)
Если НЕ <<?>>СтрНайти(ИмяПеременной,".") = 0 Тогда
{ВнешняяОбработка.СтайерОбфускацияКода.Форма.Форма.Форма(321,11)}: Процедура или функция с указанным именем не определена (СтрНайти)
Если НЕ <<?>>СтрНайти(ИмяПеременной,">") = 0 Тогда
{ВнешняяОбработка.СтайерОбфускацияКода.Форма.Форма.Форма(326,11)}: Процедура или функция с указанным именем не определена (СтрНайти)
Если НЕ <<?>>СтрНайти(ИмяПеременной,"<") = 0 Тогда
{ВнешняяОбработка.СтайерОбфускацияКода.Форма.Форма.Форма(406,29)}: Процедура или функция с указанным именем не определена (СтрНайти)
ТекПозицияТочкиЗапятой = <<?>>СтрНайти(стрОбработанныйКод,";",,ТекПозицияТочкиЗапятой);
{ВнешняяОбработка.СтайерОбфускацияКода.Форма.Форма.Форма(412,30)}: Процедура или функция с указанным именем не определена (СтрНайти)
ПредПозицияТочкиЗапятой = <<?>>СтрНайти(стрОбработанныйКод,";",НаправлениеПоиска.СКонца,ТекПозицияТочкиЗапятой-1);
{ВнешняяОбработка.СтайерОбфускацияКода.Форма.Форма.Форма(413,23)}: Процедура или функция с указанным именем не определена (СтрНайти)
ПредПозицияПерем = <<?>>СтрНайти(стрОбработанныйКод," перем ",НаправлениеПоиска.СКонца,ТекПозицияТочкиЗапятой-1);
{ВнешняяОбработка.СтайерОбфускацияКода.Форма.Форма.Форма(431,30)}: Процедура или функция с указанным именем не определена (СтрНайти)
ПозицияПервойФункции = Мин(<<?>>СтрНайти(стрОбработанныйКод," функция "),СтрНайти(стрОбработанныйКод," процедура "));
{ВнешняяОбработка.СтайерОбфускацияКода.Форма.Форма.Форма(431,71)}: Процедура или функция с указанным именем не определена (СтрНайти)
ПозицияПервойФункции = Мин(СтрНайти(стрОбработанныйКод," функция "),<<?>>СтрНайти(стрОбработанныйКод," процедура "));
{ВнешняяОбработка.СтайерОбфускацияКода.Форма.Форма.Форма(434,39)}: Процедура или функция с указанным именем не определена (СтрНайти)
ПозицияКонцаПоследнейФункции = Макс(<<?>>СтрНайти(стрОбработанныйКод," конецфункции ") + 14 ,СтрНайти(стрОбработанныйКод," конецпроцедуры " + 16));
{ВнешняяОбработка.СтайерОбфускацияКода.Форма.Форма.Форма(434,91)}: Процедура или функция с указанным именем не определена (СтрНайти)
ПозицияКонцаПоследнейФункции = Макс(СтрНайти(стрОбработанныйКод," конецфункции ") + 14 ,<<?>>СтрНайти(стрОбработанныйКод," конецпроцедуры " + 16));
{ВнешняяОбработка.СтайерОбфускацияКода.Форма.Форма.Форма(446,21)}: Процедура или функция с указанным именем не определена (СтрНайти)
ПозицияПробела = <<?>>СтрНайти(стрОбработанныйКод," ",,КоличествоСимволовВСтроке);
81. masterkio 334 31.08.16 08:27 Сейчас в теме
(80) vasyS,
Проверьте по этому пункту в описании:
"Требуется платформа не ниже версии 8.3.7, в конфигурации не должен быть установлен режим совместимости, поэтому для использования обработки лучше всего создать пустую конфигурацию и запустить её в толстом клиенте обычном приложении, в конфигураци необходимо включить возможность использования модальных окон."
82. webandroid 2 24.09.16 14:05 Сейчас в теме
текст в ковычках тоже обфусцирует. Зачем??? "҇ҫҜҦүҖҔҦҰ ҁѸ҅"
83. masterkio 334 26.09.16 09:12 Сейчас в теме
(82) webandroid, Тексты запросов + по комментария можно найти фрагмент кода.
88. ture 606 07.12.16 08:59 Сейчас в теме
(0) Я часто сталкиваюсь с людьми, которые учат писать код правильно (словно все вокруг не умеют). У меня нет своих принципиальных правил, как нужно говнокодить в 1С. Однако автор этой публикации меня покорил, и, на мой взгляд, заслужил приз за лучший говнокод.
89. masterkio 334 07.12.16 09:11 Сейчас в теме
(88)Просто ради интереса, вы про код самой обработки?
90. nomadon 367 09.12.16 10:37 Сейчас в теме
два вопроса...
1. Как вернуть все обратно? ))
2. Те кто плохо высказываются могут предложить лучшее решение не за деньги?
NewLifeMan; +1 Ответить
91. корум 287 09.12.16 11:36 Сейчас в теме
(90) 1. никак.
2. Послушаем начальника транспортного цеха :)
92. Serega-artem 16 12.12.16 10:09 Сейчас в теме
Автору однозначно плюс, хотя бы за идею проделанную работу. Сакачал будем тестить)
93. Kyrales 144 12.12.16 12:16 Сейчас в теме
А в управляемых формах сделать не судьба?
96. Horex 11.01.18 16:49 Сейчас в теме
Скачал обработку v4 и сразу выпадает куча ошибок:
{ВнешняяОбработка.СтайерОбфускацияКода_v4.Форма.Форма.Форма(323,61)}: Переменная не определена (НаправлениеПоиска)
ПозицияНачалоПеременной = СтрНайти(стрОбработанныйКод," ",<<?>>НаправлениеПоиска.СКонца,ПозицияПеременная,2);
///////////////////
{ВнешняяОбработка.СтайерОбфускацияКода_v4.Форма.Форма.Форма(480,21)}: Процедура или функция с указанным именем не определена (СтрНайти)
ПозицияПробела = <<?>>СтрНайти(стрОбработанныйКод," ",,КоличествоСимволовВСтроке);


Жаль потраченных мани
97. FractonKireyev 11.01.18 22:12 Сейчас в теме
(96)
"Как много нам открытий чудных..." несёт простое прочтение инструкции. Ну, или можно почитать комментарии в этой ветке (например: (81) ).
98. пользователь 02.04.18 14:53
Сообщение было скрыто модератором.
...
99. buganov 200 27.04.18 14:17 Сейчас в теме
8.3.10
ВнешняяОбработка.СтайерОбфускацияКода_v4.Форма.Форма.Форма(388)}: Ошибка при вызове метода контекста (ОтметитьЭлементы)
Если сзИменаПеременных.ОтметитьЭлементы("Идентификаторы для замены") Тогда
по причине:
Использование модальных окон в данном режиме запрещено!
Оставьте свое сообщение