Антидекомпилятор

04.09.23

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

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

Актуальный релиз

Наименование Файл Версия Размер
Антидекомпилятор:
.epf 124,97Kb
51
.epf 1.0.0.3 124,97Kb 51 Скачать

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

Любой разработчик рано или поздно сталкивается с необходимостью защиты своих разработок. Фирма 1С предоставляет встроенные возможности защиты разработок:

  1. Установка пароля на модуль.
  2. Поставка конфигурации без исходных модулей.

При этом большинству программистов 1С известно, что такая защита снимается без особого труда известной обработкой, которая широко распространена в интернете и доступна для свободного скачивания. Когда-то давно, несколько лет назад, и мне потребовалась необходимость закрыть код своей разработки до момента оплаты заказчиком выполненной работы, подстраховаться, так сказать. Для такой простой задачи, как оказалось, совершенно не было средств защиты. Все встроенные и бесплатные механизмы защиты снимались без особого труда, а коммерческие средства защиты стоят немалых денег, да и в данном случае были просто неуместны. Как оказалось, информации в свободном доступе по этому вопросу практически нет, пришлось в течение полугода по крупицам собирать информацию на разных форумах, просто выпрашивать у сведущих людей хоть что-то, что могло пролить свет на этот вопрос. И вот спустя полгода поисков и экспериментов я имел на руках некий рабочий инструмент, собранный из обрывков информации, набросков полурабочих обработок, каких-то несвязанных кусков кода, который позволял быстро и бесплатно защитить свою разработку от простого декомпилирования. Признаться, воспользовался я обработкой всего пару раз, забросил в дальний ящик и успешно забыл про нее. Никаких планов публиковать ее не было, т.к. механизмы, используемые в этой обработке, официально не документированы и как будут обстоять дела в этой области, с развитием платформы, было совершенно непонятно. На днях один мой знакомый, обратился ко мне с похожей проблемой, я раскопал свою обработку из далекого ящика и, о чудо, она до сих пор работает, внутренние механизмы платформы за все это время нисколько не изменились. Эта информация вдохновила меня вернуться к этому проекту вновь. Первым делом обработка была переведена на управляемые формы. Как оказалось, за прошедшее время появилось несколько интересных публикаций, которые в значительной степени раскрывают суть работы виртуальной машины 1с, предоставляют неплохо документированные инструкции байт-кода 1с (вот бы эти публикации лет 8 назад, сколько бы времени можно было сэкономить J). Сама 1с добавила возможность выгружать конфигурации и обработки в файлы, что немедленно породило в моей голове идею использовать этот механизм в своих целях. Дело в том, что ранее для работы моей обработки требовалась внешняя утилита v8unpack, которая распаковывает контейнеры 1с. Благо и здесь имеются публикации приоткрывающие завесу тайны формата контейнера, да и сама утилита имеет открытые исходники, благодаря которым, преимущественно, мне и удалось реализовать свою задумку. При этом желание сэкономить время, зачастую приводит к обратному эффекту, времени тратится на решение значительно больше, чем, если бы этих попыток, сэкономить время, не было. Этот случай не стал исключением (xd). Мне очень не хотелось разворачивать среду работы с С , вникать в тонкости и детали окружения, в связи с чем в исходниках разбирался исключительно с помощью блокнота, что в значительной степени взорвало мой мозг, подорвало душевное и физическое здоровье. Но не буду утомлять читателя подробностями, главное результат.

В обработке сохранена возможность работы с файлами, распакованными утилитой v8unpack, и файлами, выгруженными средствами 1с: 

 

89e85b4c2e7ee7272c75b809924bf53f.png

 

Просто нужно указать, с каким форматом будет производиться работа, и перейти к следующему шагу. Далее никаких различий в работе обработки для разных форматов не будет, все действия выполняются единообразно как для формата 1с, так и для файлов распакованных утилитой v8unpack. На следующем шаге необходимо указать папку, в которую был распакован контейнер или выгружены файлы конфигурации/обработки:

 

6b453253419e84504656b72fc53108ef.png

 

Инструкцию о том, как пользоваться утилитой v8unpack, приводить не буду, думаю, любознательный читатель в состоянии сам разобраться с этим, тем более ссылки на статьи источники приведены выше по тексту. А вот процесс выгрузки и загрузки обработки в/из файлов в формате 1с покажу, т.к. при загрузке из файлов сам столкнулся с трудностями. Итак, для сохранения обработки в файлы, необходимо в меню «Действия» выбрать пункт «Выгрузить в файлы»:

 

b4b0008203215556852560e23b120665.png

 

Выбрать каталог на диске и нажать кнопку «Сохранить». Именно этот каталог должен быть скормлен обработке «Антидекомпилятор». После того, как файлы подготовлены и антидекомпилятору указан путь к каталогу с файлами можно переходить к следующему шагу. При переходе к которому обработка анализирует содержимое каталога на предмет наличия закрытых модулей (модуль должен быть закрыт паролем, либо не быть включенным в файл поставки), если таковые будут найдены, то откроется окно со списком этих модулей:

 

59dffa29233b987890f7ded76a0ee474.png

 

Выбираем объекты, которые необходимо защитить от декомпиляции и переходим к следующему шагу. Собственно при переходе к следующему шагу выполняется вся работа по защите байт-кода. Если никаких ошибок в процессе не возникло, появляется окно с соответствующей информацией:

 

ed8aea0725e0f07dfdcb4b0e5f876ae0.png

 

На этом работу с обработкой можно считать завершенной. Теперь требуется загрузить обработку из файла в обработку 1с. Вот тут я столкнулся с трудностями, я так и не смог этого сделать из меню самой обработки:

 

f682cf2c112a192426421ffaebc1c9b1.png

 

По моему представлению обработка, из которой была вызвана команда, должна была замениться на ту, которая загружается из файлов. Однако, после того, как платформа запрашивает пароль на закрытый модуль, обработка просто закрывается и все. Поэтому загружать нужно из главного меню «Файл» -> «Открыть», выбираем формат «Обработка или отчет в формате XML (корневой файл)», натравливаем диалог открытия на наш каталог и открываем.

 

d441a321b994cfe9cd3946ab59c99f1d.png

 

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

 

3b52dcfd8496ee22d4e9a33ac28991a7.png

 

P. S. Если модуль закрытой обработки будет изменен разработчиком, то ее нужно будет обрабатывать еще раз.

См. также

Формирование файлов ЭЦП

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

Внешняя обработка на УФ для формирования файлов подписей. Формирует как отсоединенные, так и присоединенные ЭЦП. Не требует БСП, работает как в тонком, так и в веб-клиенте.

1 стартмани

26.02.2023    3072    29    serg33rus    7    

17

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

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

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

1 стартмани

09.02.2023    2032    7    aximo    4    

2

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

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

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

2 стартмани

30.01.2023    1452    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    2684    8    keyn5565`    0    

11

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

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

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

2 стартмани

31.08.2022    3460    3    vit59    2    

5

Распаковщик / запаковщик файлов

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Распаковщик / запаковщик файлов написан полностью на чистом 1С. Реализация исключительно на работе с двоичными данными, буферами и потоками. Работает только в файловом варианте на платформе 8.3.9 и выше х64. Протестировано на платформе 8.3.23.1739.

10 стартмани

08.07.2022    15739    72    ZhokhovM    30    

57

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

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

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

10 стартмани

16.06.2022    9405    65    ZhokhovM    12    

36
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. maksa2005 473 03.06.22 09:48 Сейчас в теме
Я помимо этого еще дишефрую в нечитабельный вид код, ну малоли придумаю обход и Вашей обработки)))
2. пользователь 03.06.22 10:49
Сообщение было скрыто модератором.
...
3. SerVer1C 732 03.06.22 11:19 Сейчас в теме
При попытке декомпилировать такую обработку будут выданы подобные ошибки

У вас просто нет годного декомпилятора )
kbulygin; VitaliyCeban; ILM; sewell; sinichenko_alex; lunjio; AlexandrSmith; JohnyDeath; papami; +9 Ответить
5. ZhokhovM 811 03.06.22 11:59 Сейчас в теме
(3) из известных только 1 декомпилятор.
9. пользователь 03.06.22 22:36
Сообщение было скрыто модератором.
...
14. sinichenko_alex 171 05.06.22 17:56 Сейчас в теме
(3) Плюсую. Только хотел написать "демо в студию" ))) Но потом решил, что не имеет смысла
4. пользователь 03.06.22 11:20
Сообщение было скрыто модератором.
...
6. grumagargler 723 03.06.22 21:32 Сейчас в теме
(4) даже обфусцированный wiseadvice-овским решением?
7. SerVer1C 732 03.06.22 21:50 Сейчас в теме
8. пользователь 03.06.22 22:27
Сообщение было скрыто модератором.
...
30. SerVer1C 732 22.06.22 14:29 Сейчас в теме
10. 2tvad 70 04.06.22 13:41 Сейчас в теме
Всё это хорошо, пока ошибки не полезли. А результат нужен вот сейчас. А там код закрыт. А у вас отгрузка стоит.

Моё мнение, закрытый код - зло.
ktb; lexiff; ubnkfl; dabu-dabu; Irwin; asupsam; niki295; kbulygin; nsirotkin@mail.ru; oninfostart; mrChOP93; awk; triviumfan; ILM; Shmell; sinichenko_alex; lunjio; ltfriend; vanyek; МимохожийОднако; AlexandrSmith; papami; JohnyDeath; mondordom; +24 Ответить
11. mondordom 04.06.22 19:58 Сейчас в теме
(10) Вот люто плюсую. А то забодали "мамкины программисты": напишут 100 строчек своего уникального кода, и закрывают свое "ноу-хау", как будто там исходники Винды. И бодайся с ошибками в их закрытых модулях, как хочешь
lexiff; asupsam; niki295; ILM; papami; sinichenko_alex; lunjio; vanyek; AlexandrSmith; +9 Ответить
16. FatPanzer 05.06.22 23:31 Сейчас в теме
(11) Просто не надо иметь дел с "мамкиными программистами". Если код написан по вашему заказу и за деньги - вы являетесь владельцем кода.
Всех закрывальщиков слать лесом.
Olenevod; leonidol; papami; tindir; +4 Ответить
18. ixijixi 1696 06.06.22 14:17 Сейчас в теме
(16) Кто является владельцем кода определяется договором.
suepifanov; Silenser; 0x00; ELInfinito; cleaner_it; maksa2005; +6 Ответить
12. МимохожийОднако 140 05.06.22 07:22 Сейчас в теме
Периодически сталкиваюсь с закрытым кодом неких деятелей, которые после продажи коробочной версии, требуют через некоторое время денег за поддержку и при этом никаким образом не реагируют на просьбы пользователей исправить обнаруженные ошибки. .су*ины дети...
ktb; lexiff; mrChOP93; ivanov660; lunjio; vanyek; +6 Ответить
13. opus70 73 05.06.22 12:27 Сейчас в теме
закрытый код это зло в кубе и если есть возможность то всегда куплю только с открытым кодом
так как и на исправления открытого кода обычно нет времени то связываться с закрытыми поделками тем более не хочется
lexiff; kbulygin; so-quest; Shmell; +4 Ответить
31. Adrenal1n 3 25.06.22 01:07 Сейчас в теме
(10), (11), (12), (13) Тогда не покупайте типовые решения от 1с, потому что часть модулей типовых конфигураций поставляется без исходных модулей (закрыта).
32. МимохожийОднако 140 25.06.22 08:44 Сейчас в теме
(31) На мой взгляд, хамоватый комментарий. Фокус в том, что тот, кто покупает разработку не оповещается о наличии закрытого кода и дальнейшей оплате подписки по поддержке. В типовых решениях от 1С код открыт и явно оговорены условия поддержки и использования шаблонов. Я не рассматриваю в данном случае франчайзи. Их решения не типовые,но они обычно описывают условия использования.
В данном случае, я обратил внимание на тех с***ных детей, которые красиво продают свои разработки и так же легко кидают своих клиентов через некоторое время и при наличии замечаний. Программист, который начинает разбираться в возникших проблемах, нарывается на закрытый код. Ну и.т.д и т.п
33. artbear 1444 28.06.22 19:06 Сейчас в теме
(32) К сожалению, 1С не всегда поставляет свои типовые конфигурации с полностью открытым кодом.
Например, в КА (и ЕРП-подобных конфигурациях) есть общий модуль СверкаУчетаСНДС - его код отсутствует в поставке.
на партнерке есть офиц.ответ от 1С, что этот модуль официально идет без исходных кодов.
ZhokhovM; +1 Ответить
15. sinichenko_alex 171 05.06.22 17:57 Сейчас в теме
Увидел статью... Вспомнил Аву... :(
Eeeehhhh; jif; awk; swenzik; ILM; sewell; so-quest; Shmell; МимохожийОднако; dmpas; leo-i; +11 Ответить
17. mixperm 67 06.06.22 10:34 Сейчас в теме
У меня так украли мой код парсера и сделали свой сервис, а я несколько лет собирал с китайских сайтов информацию. Поэтому считаю неуважение к разработчикам чей код взламывают и используют. Поэтому код нужно защищать так чтоб не смогли использовать его.
vsesam80; Tlrd; Olenevod; cleaner_it; grumagargler; San4eZ1C; delta; d.zhukov; +8 1 Ответить
19. пользователь 06.06.22 15:40
Сообщение было скрыто модератором.
...
20. IlyaNizamov 06.06.22 20:28 Сейчас в теме
Закрытые обработки зло. Те кто не хочет платить, постарается не заплатить. Работайте по предоплате, если есть наработанный и подтвержденный авторитет, я всегда так поступаю. На крупных проектах 50%, мелкие задания 100%. Если страшно передавать обработку, запишите подробный скринкаст с демонстрацией, и после этого просите предоплату. Выносите критичную часть кода в облако.
ktb; abdurohman; sinichenko_alex; papami; +4 Ответить
21. Dansur 261 07.06.22 11:31 Сейчас в теме
Я думаю что условия тестирования и принятия заказчиком должны быть обговорены еще до подписания контракта и в нем же и указаны.
И самое главное в догворе должно быть указано ЧТО ИМЕННО покупает заказчик. в ряде случаев часть функционала представляет коммерческую тайну разработчика и не подлежит декомпиляции и не должно быть декомпилировано даже после передачи работ.

Покупатель должен быть уведомлен что на тестировании (до приемки работ) он работает с "ограниченным функционалом", который имеет некоторые ограничения.

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

в результате правильной юридической работы в самом начале обеим сторонам будет проще совершить или расторгнуть сделку, и тогда такие обработки как декомпляторы будут просто не нужны. Поэтому за обработку плюс.
28. papami 55 13.06.22 21:22 Сейчас в теме
(21) Все, что пишется на платформе 1С, на мой взгляд (даже сам контекст это предполагает), легко натягивается на ГК 1280 ч.3. из-за необходимости всяких обменов и прочего взаимодействия.
Ни когда не закрывал, хотя понимал наличие вероятности, что кто-то может взять код. И чем дальше в теме, тем больше уверен, что основная ценность не в коде самом по себе, а в методике. Если делаются какие-то сложные операции и есть какая-то специфика, например, отраслевая - вас в любом случае попросят внедрить. Если там что-то простое - этот кусок просто выкинут и перепишут. Даже ломать ни кто не будет.
22. d.zhukov 1365 08.06.22 13:28 Сейчас в теме
Выбрал каталог с распакованным файлом. Пишет "В указанном каталоге закрытых модулей не обнаружено."
Запаролен код модуля. Что не так?
23. ZhokhovM 811 08.06.22 13:42 Сейчас в теме
(22) вероятно у вас нет байт-кода. возможно в запароленном модуле есть директивы компиляции или ошибки модуля или удален байт-код.
24. d.zhukov 1365 08.06.22 13:43 Сейчас в теме
(23) а как это провериьт?
25. ZhokhovM 811 08.06.22 13:49 Сейчас в теме
(24)
Если выгружали средствами 1с, то найдите и откройте файл *.bin, в содержимом файле должен присутствовать раздел "Cmd".
Если выгружали утилитой v8unpack, то найдите и откройте файл image.data или image, в содержимом файле должен присутствовать раздел "Cmd".
26. d.zhukov 1365 08.06.22 13:52 Сейчас в теме
(25) есть такой раздел
27. ZhokhovM 811 08.06.22 13:53 Сейчас в теме
(26)файл с разделом cmd 1с ассемблером открывается?
29. alnazarov 262 16.06.22 19:16 Сейчас в теме
"Вот тут я столкнулся с трудностями, я так и не смог этого сделать из меню самой обработки:" - никаких проблем. Замечательно загрузились. Платформа 8.3.20.1838.
Оставьте свое сообщение