[2 in 1] «Обфускация кода 1С» и «RegExp Тестер»

Опубликовал coder1cv8 в раздел Программирование - Инструментарий

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

1. Обфускация кода 1С.
Что же такое обфускация? Как говорит Википедия:
Обфускация (от лат. obfuscare, «затенять, затемнять») — запутывание кода программы, то есть приведение исходного текста или исполняемого кода к виду, сохраняющему функциональность программы, но затрудняющему анализ, понимание алгоритмов работы и модификацию при декомпиляции. Применяется для защиты программ от декомпиляции и незаконного использования, нарушения авторских прав программистов.

Данная обработка является упрощенным обфускатором для встроенного языка 1С. В ней используются только некоторые способы лексического запутывания, такие как:
- замена имен переменных/процедур/функций/параметров на трудночитаемые;
- удаление форматирования текста;
- шифрование строковых переменных (может потребоваться capicom.dll).

Результат работы этой обработки можно увидеть на примере её исходного кода :)

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

Для работы может потребоваться capicom.dll, скачать можно с сайта Майкрософт: http://www.microsoft.com/downloads/details.aspx?familyid=ca930018-4a66-4da6-a6c5-206df13af316&displaylang=en

2. RegExp Тестер (бонус).
Обработка, предназначенная для программистов, использующих в своих программах регулярные выражения. Позволяет протестировать шаблоны выражений до непосредственного использования в коде. Так же можно использовать для поиска совпадений в произвольном тексте с использованием шаблонов.

Файлы

Наименование Файл Версия Размер Кол. Скачив.
Obfuscare_1C.zip
.1212492350 25,56Kb
25.09.09
1232
.1212492350 25,56Kb 1232 Бесплатно
RegExp_Tester.zip
.1212492391 6,45Kb
25.09.09
623
.1212492391 6,45Kb 623 Бесплатно

См. также

Лучшие комментарии

52. coder1cv8 20.11.2008 10:44
Внимание! Наконец реализованно шифрование строковых данных, содержащихся в коде! )
Шифрование довольно простенькое, с открытым ключем даже, но тем не менее, я думаю, значительно усложнит чтение кода... Плюс, не требуется никаких dll - всё штатными средствами Windows.
Ответили: (55)
# Ответить
43. German 08.07.2008 10:36
Ну что обфуксатор заглох .. хотя ОЧ. необходимая вешь.
предлагаю следующее развитие событий.
1. Вместо Уникальных идентификаторов использовать _______________________________ ну и с каким нибуть символом на конце или в начале .. а то длинны может не хватить
2. Замена множества процедур или функций на одну, вставляя определенный параметр... в дальнейшем условие по данному параметру будет определять границы алгоритма входящего в функцию.
3. Убрать все строки и другие значения в BASE64 ... в дальнейшем можно будет написать ВК, которая будет шифровать строки нормально (одну и туже строку,значение с разным результатом, что бы исключить возможность поиска по модулю).
4. Также можно применить запутывание процедур и функций.. как в статье описано .. но это на сладкое
5. Ну и после этого на все это ДОБРО можно смело ставить пароль, декомпилятор улетит
Ответили: (46) (45)
+ 3 [ KSy; fedor40; coder1cv8; ]
# Ответить
28. coder1cv8 04.06.2008 17:29
(26) Можно. Ещё можно делать ложные переходы (оператором goto), разбавлять код "мусором", заменять константы формулами и т.д. Моя обработка всего лишь пример. По теории запутывающих преобразований я бы советовал читать это: http://www.citforum.ru/security/articles/analysis/ Очень позновательно! )
+ 2 [ Lemoi; Sol; ]
# Ответить
32. coder1cv8 04.06.2008 17:57
(31) И это тоже ) Ещё не люблю "попрошайничество плюсов", если об этом зашел разговор...
Ответили: (33)
+ 2 [ maXon777; Abadonna; ]
# Ответить
5. awa 03.06.2008 20:25
(1) Насколько я понял, так как обработка исходного текста происходит в отрыве от контекста, то надо самому определять, какие имена процедур, функций и переменных можно заменять на белиберду, а какие - нет. Ведь нет никакой информации о том, какие переменные, процедуры и функции являются глобальными, какие переменные являются реквизитами объекта или формы и т.д.
Но, по крайней мере, можно определить некоторые имена переменных, процедур и функций, которые нельзя менять - те, которые объявлены со словом Экспорт. Сейчас обработки слова Экспорт нет совсем. Более того, если переменная объявлена с Экспорт, она обфусцируется вне зависимости от флажка в дереве лексического анализа.
Также нет обработки английских синонимов ключевых слов.
И еще есть траблы с регистром - если процедура объявлена как "Процедура", то в дереве лексического анализа она показывается как процедура, если же она объявлена как "процедура" или "ПроцедурА", например, то в дереве лексического анализа она становится вдруг функцией!
Ответили: (11) (9)
+ 1 [ coder1cv8; ]
# Ответить

Комментарии

1. coder1cv8 03.06.2008 15:35
Обфускатор 1С пока находиться на стадии тестирования, поэтому прошу сообщать об обнаруженных багах.
На коде 7.7 не тестировал (так как "вживую" семерку уже давно не видел), но вероятно будет работать и для него.
Ответили: (65) (5)
# Ответить
2. coder1cv8 03.06.2008 15:58
Пока имеется только один баг: нельзя использовать ковычки в комментарии.
Кто подскажет мне шаблон регулярного выражения, способного отличить двойной слэш внутри строковой константы от комментария, буду очень признателен )
Ответили: (49)
# Ответить
3. German 03.06.2008 16:47
Обфуксатор оч.даже + а вот Для отладки RegExp лучше использовать RegexBuddy
Ответили: (4)
# Ответить
4. coder1cv8 03.06.2008 16:53
(3) Не знал, поэтому и нарисовал по-быстрому свою обработку, гляну эту программу, спасибо... )
# Ответить
5. awa 03.06.2008 20:25
(1) Насколько я понял, так как обработка исходного текста происходит в отрыве от контекста, то надо самому определять, какие имена процедур, функций и переменных можно заменять на белиберду, а какие - нет. Ведь нет никакой информации о том, какие переменные, процедуры и функции являются глобальными, какие переменные являются реквизитами объекта или формы и т.д.
Но, по крайней мере, можно определить некоторые имена переменных, процедур и функций, которые нельзя менять - те, которые объявлены со словом Экспорт. Сейчас обработки слова Экспорт нет совсем. Более того, если переменная объявлена с Экспорт, она обфусцируется вне зависимости от флажка в дереве лексического анализа.
Также нет обработки английских синонимов ключевых слов.
И еще есть траблы с регистром - если процедура объявлена как "Процедура", то в дереве лексического анализа она показывается как процедура, если же она объявлена как "процедура" или "ПроцедурА", например, то в дереве лексического анализа она становится вдруг функцией!
Ответили: (11) (9)
+ 1 [ coder1cv8; ]
# Ответить
6. German 03.06.2008 21:19
Посмотри Ei // там с структуре модуля разбираются процедуры функции и переменные http://enterpriseintegrator.googlepages.com/StructureModule.jpg
Ответили: (12) (10)
# Ответить
7. Сhe Burashka 03.06.2008 22:06
На 7.7 это - типичный кирпичиватель - я таким только одну свою разработку закрыл (строк на 40), требуется явное указание в области описания всех используемых переменных, + не забывать про имена функция в реквизитах диалогов.. мое резюме - вполне нормальная защита...
Ответили: (13)
# Ответить
8. tormozit 04.06.2008 08:22
Гиблая затея, хотя и смелая =)
Ответили: (14)
# Ответить
9. coder1cv8 04.06.2008 08:30
(5) > "Насколько я понял, так как обработка исходного текста происходит в отрыве от контекста, то надо самому определять, какие имена процедур, функций и переменных можно заменять на белиберду, а какие - нет."

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

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

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

ЗЫ: Спасибо за грамотные замечания.
Ответили: (23)
# Ответить
10. Asdam 04.06.2008 08:49
(6) Сорри, что не в тему. German, подскажи плиз, а чем это ты смотришь структуру модуля?
Ответили: (22)
# Ответить
11. coder1cv8 04.06.2008 09:28
(5) > "Сейчас обработки слова Экспорт нет совсем."

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

> "Также нет обработки английских синонимов ключевых слов."

Принято.
# Ответить
12. coder1cv8 04.06.2008 09:31
(6) Герман, до твоих гениальных (в хорошем смысле этого слова :) ) творений мне долековато что и говорить... )
# Ответить
13. coder1cv8 04.06.2008 09:34
(7) Слышал про "закирпичиватель" на 7.7, но не разу не видел его в живую... Наверно потому, что у меня ещё не возникало необходимости таким образом скрывать свои алгоритмы, я ещё не написал свою "нетленку" ))
# Ответить
14. coder1cv8 04.06.2008 09:35
(8) Почему?... )
# Ответить
15. coder1cv8 04.06.2008 09:48
Исправлен баг с регистром написания. Например, "ПроЦедурА" обрабатывается корректно.
# Ответить
16. azernot 04.06.2008 10:41
А я вот не считаю такую защиту сколь либо действенной.
Сам таким образом ковырял закирпиченный Rocket Launcher, вполне успешно (только т-с-с-с!)...
Будем ждать КЗК 3.0 для 8-ки...
Ответили: (18)
# Ответить
17. coder1cv8 04.06.2008 10:52
Добавлена обработка английских синонимов ключевых слов.
# Ответить
18. coder1cv8 04.06.2008 11:00
(16) Согласен. Данная обработка написана мной чисто из интереса, без какой-либо практической цели.
Я считаю, что будущее защиты исходного кода для восьмерки за обфускаторами так называемого "байт-кода". Более тего, я тестировал бэта-версию такого обфускатора и могу сказать, что существующие на данный момент декомпиляторы просто вываливаются с ошибкой при попытке декомпеляции защищенного таким образом модуля (только не просите у меня эту обработку, я не автор и распространением не занимаюсь).
Ответили: (19)
# Ответить
19. MMF 04.06.2008 11:06
(18) обработку не надо, дай исходный байт-код + перекомпиллированный
Ответили: (20)
# Ответить
20. coder1cv8 04.06.2008 11:10
(19) MMF, я даже не сомневаюсь, что ты разберешь ) Но скорее всего, прийдется поковыряться ручками, как с любым хорошо запутанным кодом.
+ 1 [ German; ]
# Ответить
21. German 04.06.2008 11:54
ручками .. это не для нас...
# Ответить
22. German 04.06.2008 11:56
(10) в смысле чем? какой обработкой? - Ei.... На чем реализовано?- На RegExp.. немного не понял вопроса.
Ответили: (24)
# Ответить
23. coder1cv8 04.06.2008 12:16
Исправлена недоработка о которой я говорил в (9). Теперь можно перевыбирать заменяемые переменные без необходимости повторного анализа исходного кода.
# Ответить
24. Asdam 04.06.2008 12:38
(22) Дошло
# Ответить
25. coder1cv8 04.06.2008 13:01
Добавлена обработка ключевого слова Экспорт.
# Ответить
26. shachneff 04.06.2008 17:09
а можно еще случайным образом использовать смесь рус и анг операторов?
Ответили: (28) (27)
+ 1 [ German; ]
# Ответить
27. vip 04.06.2008 17:12
(26) Никак нетленку сваял, Алеша?
# Ответить
28. coder1cv8 04.06.2008 17:29
(26) Можно. Ещё можно делать ложные переходы (оператором goto), разбавлять код "мусором", заменять константы формулами и т.д. Моя обработка всего лишь пример. По теории запутывающих преобразований я бы советовал читать это: http://www.citforum.ru/security/articles/analysis/ Очень позновательно! )
+ 2 [ Lemoi; Sol; ]
# Ответить
30. coder1cv8 04.06.2008 17:54
(29) Без всякого смысла ) Просто "RegExp Тестер" не заслуживает вобщем-то особого внимания, но тем не менее очень помогла мне разобраться с регулярными выражениями и я решил её добавить в качестве бонуса )
# Ответить
31. Abadonna 04.06.2008 17:54
(29)А почему бы не сделать две разработки???
Просто автор, как я понимаю, не гонится за дешевой популярностью, плодя количество разработок с целью получения поболее плюсиков. За это ему - ПЛЮС
Ответили: (32)
# Ответить
32. coder1cv8 04.06.2008 17:57
(31) И это тоже ) Ещё не люблю "попрошайничество плюсов", если об этом зашел разговор...
Ответили: (33)
+ 2 [ maXon777; Abadonna; ]
# Ответить
33. Abadonna 04.06.2008 18:00
(32) Блин, придется еще один поставить - заслужил :))))))))))))))
Ответили: (34)
# Ответить
34. coder1cv8 04.06.2008 18:52
(33) хе-хе ))
# Ответить
35. awa 04.06.2008 20:23
Ключевое слово Экспорт уже распознается, но по-прежнему у переменных, объявленных с Экспорт по-умолчанию стоит галка в дереве лексического запутывания. Все-таки надо бы по-умолчанию галку снимать. И еще неплохо бы было как-то выделять в дереве процедуры и переменные с Экспорт, как предупреждение, что не стоит тут ставить галку (или вообще запретить ее ставить).
Еще есть глюк с совпадающими именами переменных и функций. Вот такой код обфусцируется неправильно:
Код
Сообщить = "Тест";
Сообщить(Сообщить);
Показать полностью

При обфускации переменной Сообщить, неправомерно обфусцируется системная функция Сообщить.
Ответили: (38) (36)
+ 1 [ coder1cv8; ]
# Ответить
36. coder1cv8 05.06.2008 07:12
(35) Принято.
# Ответить
37. aim 05.06.2008 11:34
Спасибо за идею интеграции RegExp в 1С. Как раз хотел этим заняться.
Ответили: (38)
# Ответить
38. coder1cv8 05.06.2008 13:07
Файл обновлен.
Исправлена ошибка о которой говорится в (35). Доработан интерфейс.
Итак совместными усилиями с awa обработка начинает приобретать законченный вид. )

(37) Эта идея стара как мир )
Ответили: (39)
# Ответить
39. awa 05.06.2008 13:58
(38) Не смотрел, но вот такой вопрос: не будет ли проблем с проблем с инструкциями препроцессора? Ведь инструкции препроцессора должны обязательно содержаться в отдельной строке, засовывать их в одну строку с простым кодом нельзя!
Ответили: (40)
# Ответить
40. coder1cv8 05.06.2008 15:04
(39) Точно! ) Инструкции препроцессора пока не поддерживаются...
# Ответить
41. Трактор 08.06.2008 23:28
Прикольно. Как-то я делал такое вручную. Но это было давно. С тех у меня не было необходимости шифровать свои разработки.
Ответили: (42)
# Ответить
42. coder1cv8 09.06.2008 07:58
(41) Аналогично. ) Эта разработка скорее "для удовольствия". Было интересно сделать парсинг кода самому.
# Ответить
43. German 08.07.2008 10:36
Ну что обфуксатор заглох .. хотя ОЧ. необходимая вешь.
предлагаю следующее развитие событий.
1. Вместо Уникальных идентификаторов использовать _______________________________ ну и с каким нибуть символом на конце или в начале .. а то длинны может не хватить
2. Замена множества процедур или функций на одну, вставляя определенный параметр... в дальнейшем условие по данному параметру будет определять границы алгоритма входящего в функцию.
3. Убрать все строки и другие значения в BASE64 ... в дальнейшем можно будет написать ВК, которая будет шифровать строки нормально (одну и туже строку,значение с разным результатом, что бы исключить возможность поиска по модулю).
4. Также можно применить запутывание процедур и функций.. как в статье описано .. но это на сладкое
5. Ну и после этого на все это ДОБРО можно смело ставить пароль, декомпилятор улетит
Ответили: (46) (45)
+ 3 [ KSy; fedor40; coder1cv8; ]
# Ответить
44. German 08.07.2008 10:38
Хотя прикольно.. Сами написали декомпилятор, теперь пишут обфуксатор :). потом будет декомпилятор обфуксатора
# Ответить
45. German 08.07.2008 10:39
(43) + ну и циклы переделать в GoTO
# Ответить
46. coder1cv8 08.07.2008 11:25
(43) Да, сейчас немножко не хватает времени на развлечения, занят серьезными делами )
Далее по пунктам:
1. Тоже думал о этом, специально оставил возможность редактировать имя НА которое заменяется. Можно дорисовать кнопочку "Заполнить" в "Дереве лексического запутывания", которая будет заполнять колонку "Идентификатор после" по любому понравившемуся алгоритму... )
2. Не хочется возиться с изменением структуры самого кода...
3. И об этом тоже думал, вот идея шифровать строковые данные мне очень нравиться! Обязательно займусь этим как только будет время...

ЗЫ: Хотя я здесь уже говорил, что всё это баловство, нужно обфусцировать непосредственно байт-код! )
Ответили: (47)
# Ответить
47. coder1cv8 08.07.2008 11:28
+(46) Как всегда спасибо за грамотные замечания!
# Ответить
48. fedor40 11.11.2008 17:44
Хорошая наверно вешь. Я уже + поставил. Вот только не работает !

{ВнешняяОбработка.АРМзакупок(1070,6250)}: Ожидается ключевое слово 'Тогда' ('Then').
Ответили: (49)
# Ответить
49. coder1cv8 11.11.2008 19:07
(48) Читай внимательно комменты, в частности комментарий номер (2) :)
Если не поможет, то прошу в личку кусочек кода который не корректно обфусцируется, будем разбираться...
Ответили: (51)
# Ответить
50. fedor40 18.11.2008 23:37
А если просто добавить множество переменных ? C названием от 10 до 100 символов ? И разными типами...
Ответили: (51)
# Ответить
51. coder1cv8 19.11.2008 09:35
(50) Можно... Можно ещё переходами и просто "левым" кодом разбавлять...
Но пока я пытаюсь сделать шифрование строк, в свободное время...
ЗЫ: Помогло-то (49)?... )
# Ответить
52. coder1cv8 20.11.2008 10:44
Внимание! Наконец реализованно шифрование строковых данных, содержащихся в коде! )
Шифрование довольно простенькое, с открытым ключем даже, но тем не менее, я думаю, значительно усложнит чтение кода... Плюс, не требуется никаких dll - всё штатными средствами Windows.
Ответили: (55)
# Ответить
53. Rebelx 20.11.2008 14:57
ИМХО баловство все это.
Необходимо для начала ответить на вопрос, что и зачем вы хотите таким образом защитить?
если какую-нить хрень за 50р, то наверное оно того стоит.
если же что-то серьезное - то надо понимать, от чего вы защищаете свое творение. и только после получения ответов на эти вопросы стоит разрабатывать систему защиты конфигурации.
Ответили: (54)
# Ответить
54. coder1cv8 20.11.2008 15:42
(53) Ты совершенно прав! 80% из того что я здесь выкладываю - это баловство, сделанное исключительно из интереса и для саморазвития... :)
# Ответить
55. awa 20.11.2008 15:45
(52) В шифрованных строках можно смело убирать переносы строк, для дешифровки это не критично, зато модуль будет опять, как и раньше состоять из одной единственной длиннннннннющей строки! ))
Ответили: (56)
# Ответить
56. coder1cv8 20.11.2008 16:10
(55) Есть тут не большая загвоздка, не пойму чем строки переносятся?... Вот так не катит:
Код
ЭлементыФормы.Результат.УстановитьТекст(СтрЗаменить(Текст,Символы.ПС,""));
Показать полностью
Ответили: (58) (57)
# Ответить
57. coder1cv8 20.11.2008 16:27
+(56) Всё! Разобрался! ) Теперь как раньше, весь код в одну строку.
Файл обновлен.
# Ответить
58. awa 20.11.2008 16:28
(56) Ну обычно перенос бывает либо LF, либо CR+LF
попробуй
Код
ЭлементыФормы.Результат.УстановитьТекст(СтрЗаменить(Текст, Символы.ВК + Символы.ПС, ""));
ЭлементыФормы.Результат.УстановитьТекст(СтрЗаменить(Текст, Символы.ПС, ""));
Показать полностью

Вторая строка - контрольная))
Ответили: (59)
# Ответить
59. awa 20.11.2008 16:30
+(58) Не успел))))
# Ответить
60. fedor40 20.11.2008 22:48
Вот думаю. Если выпускать, доработку за 8 000 рублей и потом может еще 2000 в год брать за тех поддержку, то какая защита необходима ?
# Ответить
61. fedor40 20.11.2008 23:40
Что думаете о ключах rutoken, guardant, senselock ?
Самый дешевы Guardant Stealth III (2kb) можно взять за 475р. Как думаете он защитит ?
http://www.guardant.ru/products/guardant-stealth/
Ответили: (62)
# Ответить
62. coder1cv8 21.11.2008 08:02
(61) Я думаю, моя обфускация в совокупности с обфускацией "байт-кода" вполне достаточны. Лично я, ни за какие шиши, в таком коде копаться не буду! ) По-поводу ключей, есть тут у нас специалист... )
# Ответить
63. fedor40 21.11.2008 08:41
Что значит: "По-поводу ключей, есть тут у нас специалист... ) " ...
Ответили: (64)
# Ответить
65. SONICUS 04.01.2009 22:38
Попробовал открыть обработку вылезла ошибка:
{Форма.Форма(1)}: Метод объекта не обнаружен (SetSecret)
по причине:
{Форма.Форма(1)}: Метод объекта не обнаружен (SetSecret)

Чо с ней делать? Платформа 8.1.12.101
Ответили: (66)
# Ответить
66. coder1cv8 10.01.2009 09:49
(65) Как написано выше, в описании: при использовании шифрования строковых переменных может потребоваться capicom.dll.
Что делать? Варианта 2: либо не устанавливать галочку "шифровать строковые переменные" при обфускации, либо скачать и зарегистрировать эту dll-ку.
# Ответить
67. SONICUS 10.01.2009 15:49
Не знаю как на счет первого варианта(обработка не запускалась изначально, а значит и галочку снимать не от куда было), но второй вариант прошел, после того как я скачал с сайта майкрософт пакет CAPICOM-KB931906-v2102. Так что в моем случае, чтобы воспользоваться этой обработкой наличие capicom.dll было обязательным условием.
Ответили: (68)
+ 1 [ coder1cv8; ]
# Ответить
68. coder1cv8 10.01.2009 20:14
(67) Хм... Да, прошу прощения, я забыл что выложенная здесь обработка уже обфусцированна! :) И конечно же, требует capicom.dll, хотя в моей (к примеру) винде такая длл-ка уже была установлена по-умолчанию. Спасибо за ценное замечание!
# Ответить
69. Abadonna 10.01.2009 20:29
>хотя в моей (к примеру) винде такая длл-ка уже была установлена по-умолчанию
Знаешь в чем прикол: сегодня переставил систему - фигвам, нема её :)))
Это кто-то видать подставляет при инсталляции... какая-то прога
Ответили: (70)
# Ответить
70. Abadonna 10.01.2009 20:30
+(69) А ведь была, гадина :))))))))))
Так что - не по умолчанию
# Ответить
71. Душелов 10.01.2009 20:45
Прелагаю коммерческий проект - обфускация конфигурации :)
Тестерам - бесплатно! ;)
# Ответить
72. r_p 15.05.2009 13:13
Обфускицинул код в 1500 строк, при получении результата все записывается в одну строку, скопировать полностью из текстового поля её нельзя, при нажатии кнопки сохранить 1с вылетает. Платформа 1с 8.1 последняя. Можно ли записывать не в одну строку, а в несколько, либо ввести параметр максимальное количество знаков в строке.
Ответили: (73)
# Ответить
73. coder1cv8 15.05.2009 14:29
(72) Можно. Будет параметр для разбивания по строкам, в следующем релизе.
Ответили: (74)
# Ответить
74. r_p 15.05.2009 17:32
(73) Отлично, а когда релиз?
Ответили: (77) (75)
# Ответить
75. coder1cv8 15.05.2009 17:55
(74) Скоро ) С работой разберусь немного...
Ответили: (76)
# Ответить
76. YRAtomic 27.05.2009 11:38
(75) Заждались уже :))
Ответили: (77)
# Ответить
77. coder1cv8 04.06.2009 16:48
(74) (76)
Добавил разбиение результата на строки.
Довольно приметивное, перенос осуществляется только по ";" и не разбиваются строковые константы, но я думаю этого будет достаточно?...
# Ответить
78. YRAtomic 04.06.2009 20:48
о, спасибо
# Ответить
80. Plu 22.07.2009 20:25
все работает, если не ставлю галку на процедурах и функциях.
Ответили: (81)
# Ответить
81. coder1cv8 23.07.2009 09:52
(80) Дык, галку на процедурах/функциях надо с умом ставить, а не подряд )))
# Ответить
82. AlecoZAV 23.07.2009 11:17
в итоге только те названия функций и процедур, которые не привязаны к событию, успешно кодируются.
Ответили: (83)
# Ответить
83. coder1cv8 23.07.2009 17:48
(82) Ну естественно! А как же иначе? ) События и экспортные процедуры/функции обфусцировать можно только с аккуратностью, заменяя идентификаторы там где надо уже ручками...
# Ответить
84. ROM 25.10.2009 22:03
Все это очень красиво и наглядно.. спотреть на "переработанный" код..
А можно все это чудо вернуть при необходимости вернуть к людському виду?
И у меня при открытии обработки вылетает ошибка:
{Форма.Форма(128)}: Помилка при виклику конструктора (COMОбъект): Недопустимая строка с указанием класса
через:
{Форма.Форма(128)}: Помилка при виклику конструктора (COMОбъект): Недопустимая строка с указанием класса

через:
Недопустимая строка с указанием класса
...Показать Скрыть

Как ее исправить?
Ответили: (87) (85)
# Ответить
85. dushelov 25.10.2009 22:13
(84) Не обфусцировать текстовые параметры или создание ком-объектов.
Ответили: (87)
# Ответить
86. ROM 25.10.2009 22:21
с ошибкой разобрался... а вот как по первому вопросу декодирования???
Ответили: (87)
# Ответить
87. coder1cv8 26.10.2009 07:09
(85) Душелов +1 )
(84) Это значит что не зарегистрирована capicom.dll. Сам обфускатор, выложенный здесь, требует для своей работы эту библиотеку. А в обфусцируемых обработках, можно отключить шифрование строк и значит, использование capicom.dll.
(86) К относительно людскому виду вернуть можно, форматирование можно поправить... Имена переменных/функций уже конечно не откуда будет взять... И если строки зашифрованы были, то тоже ничего не поделать...
# Ответить
88. ROM 26.10.2009 23:02
Уважаемый, coder1cv8, хочу спросить сам алгоритм по которму можно вытянуть переменные и функции (процедуры) так как у вас в обработки...
Зарье спасибо.
Ответили: (89)
# Ответить
89. coder1cv8 27.10.2009 08:29
(88) Почту давай )
Ответили: (90)
# Ответить
90. dushelov 27.10.2009 08:41
(89) Когда обфускация конфигурации будет? ;)
Ответили: (92) (91)
# Ответить
91. ROM 27.10.2009 10:26
(90) Что вы подрозумеваете под "Обфускацией кофигурации"? Переработка всего кода базы? Смотря на данную обработку думаю, что не очень сложно сделать....
# Ответить
92. coder1cv8 27.10.2009 13:41
(90) ну это уже не моими силами, я думаю )
# Ответить
93. spy-83 15.02.2010 12:25
такую ощибку выдает:
{Форма.Форма(115)}: Индекс находится за границами массива
e83070454784f62fd6ef415c79=0;Пока b28c72bab1402aa1e527b7cdffe7a2.Count>0 Цикл a5e643824e34b44b7d59747c85b34af=df8a421a994962b5a674ed00ef23­de.Replace(a5e643824e34b44b7d59747c85b34af,ad396ecec0804589aab1acbdecdaadcc[e83070454784f62fd6ef415c79]);
Ответили: (94) (113)
# Ответить
94. coder1cv8 16.02.2010 09:13
(93) Может в коде ошибка? )
Ответили: (95)
# Ответить
95. spy-83 16.02.2010 19:26
(94) Нет
на нескольких обработках проверял, везде именно эта ошибка.
во всех кодах есть тексты запросов, может изза них?
Ответили: (96)
# Ответить
96. coder1cv8 17.02.2010 07:58
(95) А! Так это моя обработка ошибку выдает, а не обфусцированный код? )
Мне нужен какой-нибудь небольшой кусочек твоего кода, который будет выдавать такую ошибку при обфускации, что бы смоделировать ситуацию.
Ответили: (97) (98)
# Ответить
97. spy-83 17.02.2010 15:38
(96) http://infostart.ru/public/65008/
вот на модуле этой обработки проверь. выдает ошибку
# Ответить
98. spy-83 01.03.2010 14:16
(96) вот код который выдает ошибку


Функция кк()

п = 1+3;
// Разделитель = "####";

//Возврат Истина;

КонецФункции
Ответили: (100)
# Ответить
99. spy-83 01.03.2010 14:22
п = 1+3;
// Разделитель = "!!!!";

//Возврат Истина;

КонецФункции

а вот так вот не выдает
Ответили: (100)
# Ответить
100. coder1cv8 01.03.2010 17:37
(98)(99) Ну я вот для кого описание пишу? )
Читай внимательно: "Примечание: Имеется один, но очень не приятный баг, в обфусцируемом коде не должны использоваться комментарии, содержащие внутри себя кавычки"
# Ответить
101. IamAlexy 05.05.2010 07:48
Добрый день

А правильно ли я понял что обфускатор конструкции

&НаСервере
&НаКлиенте

не умеет обрабатывать, весь список этих конструкций идет вконце обрабатываемого модуля и в результате обработанный модуль получается нерабочим?
Ответили: (102)
# Ответить
102. coder1cv8 05.05.2010 16:17
(101) Правильно! В описании об этом сказано.
# Ответить
103. provadyuga 10.08.2010 19:26
Интересно было бы услышать мнения на такой вопрос: Является ли исходный код до обфускации и после нее идентичным с точки зрения авторского права?
# Ответить
104. ITAlex 27.08.2010 19:43
Приветствую, оч. интересная обработка!
Но есть видимо баг
было:
Функция ф()
Попытка
ц = 1;
Исключение
Возврат 0;
КонецПопытки;
Возврат ц;
КонецФункции

стало (форматирование подправил, чтобы было удобно сравнить):

Функция bdd2241624e11adf6f6bad0f9fad7()
Попытка
ц = 1;
Исключение
Возврат 0;
КонецПопытки;
Возврат f52ff21ce5a454fa26de4f3bce81cb6;
КонецФункции

т.е. имеем ошибку что переменная f52ff21ce5a454fa26de4f3bce81cb6 не определена
хотя, в дереве была строка с ц = f52ff21ce5a454fa26de4f3bce81cb6

:(
Ответили: (106)
# Ответить
105. ITAlex 30.08.2010 11:11
нашел... !)
вынес инициализацию переменной ц из Попытка Исключение, и все стало ок.
Функция ф()
ц = 0;
Попытка
ц = 1;
Исключение
Возврат 0;
КонецПопытки;
Возврат ц;
КонецФункции
# Ответить
106. coder1cv8 01.09.2010 10:37
(104) Баг, конечно, может и есть, но заключается он не в этом! Проверил Ваш код, вставляю в обфускатор:
Функция ф()
Попытка
ц = 1;
Исключение
Возврат 0;
КонецПопытки;
Возврат ц;
КонецФункции
...Показать Скрыть

Получаю:
Функция d02711be5c48b594c46f51f3761b6f() 
Попытка 
e3832e9546434439bb8413e0785260d1 = 1;
Исключение 
Возврат 0;
КонецПопытки;
Возврат e3832e9546434439bb8413e0785260d1;
КонецФункции
...Показать Скрыть

То есть обрабатывает корректно.

Возможно, у Вас ковычки в комментах внутри обработки (я так и не научил обфускатор их переваривать)? Сколько пишу об этом баге и в шапке и здесь - все-равно на эти грабли кто-то опять наступает...
# Ответить
107. ITAlex 03.09.2010 09:40
:oops: действительно, сегодня повторил, все ок!
хотя комментариев не было совсем...
видимо был тяжелый день !)
пасиб за ответ!
# Ответить
108. Vortexs 25.09.2010 13:14
Все таки баги есть у меня тоже кодирует не все переменные и коменты тут ни причем, я их вообще удаляю.
И как результат прога не работает

Кстати непонятно почему такая проблема с кавычками в комментариях, ониже удаляются на раз
# Ответить
109. lame 17.03.2011 07:31
файловая
1С:Предприятие 8.1 (8.1.15.14)
"Управление торговлей", редакция 10.3 (10.3.12.3)

при запуске обфускатора выдает такое сообщение:

{Форма.Форма(128)}: Ошибка при вызове конструктора (COMОбъект): Недопустимая строка с указанием класса
по причине:
{Форма.Форма(128)}: Ошибка при вызове конструктора (COMОбъект): Недопустимая строка с указанием класса

по причине:
Недопустимая строка с указанием класса


{Форма.Форма(128)}: Ошибка при вызове конструктора (COMОбъект): Недопустимая строка с указанием класса
КонецЕсли;КонецЦикла;КонецЦикла;КонецПроцедуры Функция b1812fa8ee91443bae6f870ccfc0be4f(ec5c9f684fb406b9fdc551d66b9222d) ab03457024f7e8f17d5dfac414c60=Новый COMОбъект("CAPICOM.EncryptedData");
# Ответить
110. lame 17.03.2011 07:46
проехали
надо было установить и зарег в системе библиотеку
capicom.dll
работает
# Ответить
111. VSvintsov 18.03.2011 09:43
Хорошая работа!
Пример того, как талантливый человек не прячет свои способности , а наоборот - предоставляет их в распоряжение компьютерного сообщества.

мне пригодилось. Спасибо

P.S. только видимо зашифрованные строки будут давать ошибку в случае если код выполняется на сервере приложения под Linux ?
# Ответить
112. LivingStar 27.04.2011 09:19
как воспользоваться вашей обработкой под 8.2?
тупо выдает три ошибки, даже если не ставить на второй вкладке ни одной галки.
большой код...
# Ответить
113. n_sashka@mail.ru 09.06.2011 16:11
В исходный код ввел строку:

МассивСобытий.Добавить("_$Data$_.New");

убрал галку "шифровать"
строка обфусцируется в

МассивСобытий.Добавить(############);

при нажатии "Выполнить" появляется ошибка описанная в сообщении (93)
# Ответить
114. necros 18.08.2011 16:25
Еще нашел ошибку или это просто не учтено было. Обфускатор не понимает что такое массив и создает переменную при каждом обращении к элементу массива
Массив[1]=первая переменная, Массив[4]=вторая переменная, если пропара в коде и одна и также переменная написана с разным регистром (Тов) и (тов) тоже получается две переменные, а так классно но только возможно использовать на коде в котором не используются реквизиты формы или можно но запаришься галочки снимать и устанавливать.
# Ответить
115. necros 19.08.2011 12:10
массив не понял в следующем условии

Если РазобраннаяСтрока[11] = СокрЛП(чемутотам) Тогда
есть=истина;
КонецЕсли;
# Ответить
116. OLEG4120 05.10.2011 09:10
Хочу рассказать о баге. Неоднократно в список переменных функции попадает число.

Вот, например, на таком участке кода:
...
Если СчетчикЦикла / 2 = Цел(СчетчикЦикла / 2) Тогда
    Продолжить;
КонецЕсли;
...
...Показать Скрыть


Сначала обрабатывается переменная "СчетчикЦикла", а затем "2"
# Ответить
117. kirillsas 03.11.2011 09:38
И еще есть траблы с регистром - если процедура объявлена как "Процедура", то в дереве лексического анализа она показывается как процедура, если же она объявлена как "процедура" или "ПроцедурА", например, то в дереве лексического анализа она становится вдруг функцией!
Ответили: (119)
# Ответить
118. CaSH_2004 19.11.2011 23:58
Многоуважаемый coder1cv8, будь так добр - поправь ошибочку в своей обработке или укажи в описании, она не хавает такие вещи как математический оператор "%" (остаток от деления), редкая штука конечно, но у меня встретилась. В итоге пока его не убрал писала:
Переменная не определена (b194fd3ce1d486fa0621efededc70c9)
# Ответить
119. CaSH_2004 20.11.2011 12:24
(117) :) А это наверно сделано так:
Если Строка = "Процедура" Тогда
ПроцФункц = "Процедура"
Иначе
ПроцФункц = "Функция"
КонецЕсли;
...Показать Скрыть
# Ответить
120. artem2922 24.01.2012 00:03
Спасибо автору! Работает. Пришлось правда кавычки убирать везде, но дело поправимое.
добавляешь переменную Кавычка = Символ("34");
а потом хоть сколько кавычек себе рисуешь :-)))

PS. Так принципе с любым символом можно поступить.
# Ответить
121. Kaperang 07.03.2012 14:26
Побаловался с обработкой. Вот и мои пять копеек:

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

Не отрабатывает конструкции типа Объект[Реквизит] - где Реквизит - строка, содержащая в себе имя соответстующего реквизита объекта. Обфускатор вместо того чтобы разделить на две переменных: "Объект" и "Реквизит",
считает их одной переменной "Объект[Реквизит]"

В целом, обработка весьма хороша.
# Ответить
122. MRAK 10.03.2012 09:34
В 8.2 не запускается. Пишет:

{Форма.Форма.Форма(128)}: Ошибка при вызове конструктора (COMОбъект)
по причине:
{Форма.Форма.Форма(128)}: Ошибка при вызове конструктора (COMОбъект)

по причине:
Недопустимая строка с указанием класса
# Ответить
124. nick_e 03.05.2012 08:36
Лучше напиши декомпилятор для 1с 8х который будет декомпилировать обфускацированный код. ;)
# Ответить
125. Lubocka 28.07.2012 11:53
"Шифровать строковые данные (может потребоваться capicom.dll)"
Это как понять?
Я у себя флажек поставила, обработка проработала.
Теперь когда покупатель везьмет мою обработанную "обфускатором" обработку или отчет, он сможет его запустить , если у него на компьютере не будет данной библиотеки?
# Ответить
126. Артано 17.09.2012 08:03
Спасибо, интересная обработка. Есть вопрос: не планируете ли использование криптографических классов .NET Framework X509 для шифрования? Дело в том, что CapiCom снята с поддержки и есть сомнения, в том, что она будет стабильно работать на современных ОС типа семерки и ныне уже предрелизной восьмерки.
Ответили: (127)
# Ответить
127. Silenser 21.10.2012 19:23
(126) Артано, На Win 7 x64 вполне работает.
# Ответить
128. Silenser 30.10.2012 17:03
Нашел небольшую ошибочку - если сразу за переменной следует не пробел, а символ табуляции, то парсер такую переменную не распознает. Как обойти - думаю понятно :)
Ответили: (142)
# Ответить
129. gosizo 20.12.2012 10:37
спасибо автору, потестим
# Ответить
130. MaxS 17.01.2013 10:42
Дальнейшее развитие обработки будет? ;)

Если СчетчикПрочитанныхСтрок % 500 = 0 Тогда

в этом коде 500 ошибочно меняется на переменную
# Ответить
131. Sasha255n 03.03.2013 19:21
Вещь необходимая правда пока сам не пользовался хотя необходимость в это постоянно возникает. Хочу попробовать ее на нескольких обработках. Кстати вопрос по ходу появился такой может немого наивный а может кто при желание провести обратную процедуру. Т.Е. прривдение текста к первоначальному виду?
# Ответить
132. Sasha255n 03.03.2013 19:21
Lf b rjytxyj
Ответили: (133)
# Ответить
133. Sasha255n 03.03.2013 19:22
(132) Прошу прощения хотел написать автору однозначно плюс
# Ответить
134. cerena 31.10.2013 14:13
А обратно к исходному?
Ответили: (135)
+ 1 [ psa247; ]
# Ответить
135. Alexander.Shvets 21.11.2013 21:11
(134) cerena, Одно из основных принципов обфускации:

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

Если есть обратный алгоритм - зачем тогда обфускация?
# Ответить
136. serko8547 24.11.2013 16:13
1.
После обфуксации вылазят ошибки
2. весь код идет одной строчкой (я нашел где и исправил, но... это не то)

3. КОД ЛЕГКО ВОССТАНАВЛИВАЕТСЯ.

ищу дальше... пока рулит только Нетленка.
# Ответить
137. kot_dn 25.11.2013 22:58
в принципе неплохая затея
# Ответить
138. ceramica 26.01.2014 03:15
Скачал, нифига не работает (( печаль
Ответили: (139)
# Ответить
139. vat-74 28.02.2014 10:26
(138) Че не работает-то?

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

Не плохо бы делать "префуксацию", т.е. код шифровать, но структуру не изменять, дабы отладить ошибки шифрования, а затем уже отлаженный код переносить в одну строку.
# Ответить
140. softgarant 04.04.2014 13:57
Подскажите, а проект разрабатываться дальше планируется? Импенно такой метод идеален для фильтрации копирайтеров.
# Ответить
141. Bond 29.06.2014 00:43
тоже интересует разработка. Cкачал с сайта автора, установил библиотеку, но при попытке зашифровать текст модуля формы вываливает ошибки. Приблизительно понимаю, что дело в названиях реквизитов формы и т.п. Но "нетленка" вроде все переваривает на ура... Может кто то ткнет в какую то оффлайн реализацию "нетленки", пусть даже платную.
Ответили: (144)
# Ответить
142. pervakov.a 28.08.2014 11:09
Не работает на 8.3. При открытии обработки:

Ошибка инициализации модуля: Форма.Форма.Форма
по причине:
{Форма.Форма.Форма(128)}: Ошибка при вызове конструктора (COMОбъект)

по причине:
-2147221005(0x800401F3): Недопустимая строка с указанием класса
Ответили: (143)
# Ответить
143. Патриот 29.08.2014 13:13
(142) pervakov.a, последнее обновление статьи - 14.08.09 00:00 я бы очень удивился, если бы обработка на 8.3 заработала =)
Ответили: (145)
# Ответить
144. shoy 31.10.2014 16:48
(141) Bond, Присоединяюсь и я, и думаю, что не "один такой"!
Есть где в виде обработки нечто похожее?
# Ответить
145. ekaruk 23.11.2014 12:30
(143) Патриот, как ни странно, она вполне работатет под 8.3.
Только компоненту пришлось зарегистрировать.
# Ответить
146. AlecoZAV 26.11.2014 09:04
Действительно работает, но толку нет, восстанавливается все на ура
# Ответить
147. eugeniezheludkov 26.12.2014 06:54
Т="МаксeH	w
|	qг[M)+ "" N0 по B); Vк1CначеXогдаZЦиклL + K;QJ
|IHДля кGКонецFMC1]DСтрока(S РежимWAЕслиPWНовый Массив(O		Iм[кк]UРулонYWB9 LT],MRFLа;E = WHIQ	мO30V qгO11V  qqДляAB2 LHG1T wC1WCK1; eимумW0;YW1;wPA2 ТZ QррWe(M1R2R3R4R5R6R7R8R9R10]);	QYWг.Найти(рр)JMY]W0JСообщить(SC1)+"" Место. Y ""+SYN ""KSррNбилетов""VwИXQDW0JG2TQ	G3TQIккW C+к2+к3JIPA0 тZ QI	UW?(ЗXниеЗаполнено(U),UK1,1)JIИXP U > 1 ТZQI	DWDKUJIFPJ	EQEwFP;	HEqE";
for а=1 to 29 do в=Mid("ewqMNBVCXZLKJHGFDSAPOIUYTREWQ",а,1);б=find(Т,в);Т=StrReplace(Mid(Т,б+1),в,Лев(Т,б-1));enddo;Выполнить(Т);

а так тоже можно обфусцировать ! но я так и не понял зачем 1с обфускация ? тут бьешься за красоту кода обычно
# Ответить
148. izidakg 04.01.2015 11:14
к сожалению на просторах сети других путевых примеров нет, данный пример конечно очень хороший, и как статья об обфускации все отлично, НО это ведь не статья. ЭТО ОБРАБОТКА ДЛЯ РЕАЛЬНОГО ИСПОЛЬЗОВАНИЯ, хотя и имеет ряд заявленных галов и имеет упрощенный механизм обфускации.
возможно я неправильно код 1С пишу, НО я подставлял и типовой код 1С , ну или неправильно пользуюсь обработкой обфускации.
у меня любой кусок кода кроме отдельно выбранной процедуры еще на этапе проверки на синтаксис дает ошибку.
поэтому считаю что автору надо развивать ее, иначе это понты и попрашайничество плюсов. ну а если нет желания развивать, то стоит выложить не зашифрованный вариант, так чтобы все дружно продолжили.
делаю очень сложный проект и на данный момент меня спасает только https://netlenka1c.ru/
а очень хотелось бы иметь обработку с возможностями этого ресурса
# Ответить
149. Legavaz 18.01.2016 20:06
Не работает в этой строке, у меня 10 винда 64, библиотека не регистрируется, прошу помочь, кто может.

Капиком=Новый COMОбъект("CAPICOM.EncryptedData");
Ответили: (150)
# Ответить
150. CaSH_2004 27.02.2016 18:05
Однозначная благодарность автору.
Однако хотелось бы внести ясность в указанное как тут так и в обработке
может потребоваться capicom.dll

Он не МОЖЕТ а ДОЛЖЕН быть в системе иначе обработка не запустится! Возможно он и не требуется для работы, но при открытии пытается создастся его объект см. (149) что на мой взгляд неправильно т.к. требуется я так понял только для шифрования, так что приходится качать и регистрировать ее
# Ответить
Внимание! За постинг в данном форуме $m не начисляются.
Внимание! Для написания сообщения необходимо авторизоваться
Текст сообщения*
Прикрепить файл






IE 2016