Обработка, позволяющая защитить модули закрытые паролем своих обработок, отчетов, конфигураций, а так же модули конфигураций без поставки от декомпиляции.
Предыстория.
Любой разработчик 1с рано или поздно сталкивается с необходимостью защиты своих разработок. Фирма 1с предоставляет встроенные возможности защиты разработок:
Установка пароля на модуль.
Поставка конфигурации без исходных модулей.
При этом большинству программистов 1с известно, что такая защита снимается без особого труда известной обработкой, которая широко распространена в интернете и доступна для свободного скачивания. Когда то давно, лет 8 назад, и мне потребовалась необходимость закрыть код своей разработки до момента оплаты заказчиком выполненной работы, подстраховаться, так сказать. Для такой простой задачи, как оказалось, совершенно не было средств защиты. Все встроенные и бесплатные механизмы защиты снимались без особого труда, а коммерческие средства защиты стоят немалых денег, да и в данном случае были просто неуместны. Как оказалось, информации в свободном доступе по этому вопросу практически нет, пришлось в течении полугода по крупицам собирать информацию на разных форумах, просто выпрашивать у сведущих людей хоть что-то, что могло пролить свет на этот вопрос. И вот спустя полгода поисков и экспериментов я имел на руках некий рабочий инструмент, собранный из обрывков информации, набросков полурабочих обработок, каких-то несвязанных кусков кода, который позволял быстро и бесплатно защитить свою разработку от простого декомпилирования. Признаться, воспользовался я обработкой всего пару раз, забросил в дальний ящик и успешно забыл про нее. Никаких планов публиковать ее не было, т.к. механизмы, используемые в этой обработке, официально не документированы и как будут обстоять дела в этой области, с развитием платформы, было совершенно непонятно. На днях один мой знакомый, обратился ко мне с похожей проблемой, я раскопал свою обработку из далекого ящика и, о чудо, она до сих пор работает, внутренние механизмы платформы за все это время нисколько не изменились. Эта информация вдохновила меня вернуться к этому проекту вновь. Первым делом обработка была переведена на управляемые формы. Как оказалось, за прошедшее время появилось несколько интересных публикаций, которые в значительной степени раскрывают суть работы виртуальной машины 1с, предоставляют неплохо документированные инструкции байт-кода 1с (вот бы эти публикации лет 8 назад, сколько бы времени можно было сэкономить J). Сама 1с добавила возможность выгружать конфигурации и обработки в файлы, что немедленно породило в моей голове идею использовать этот механизм в своих целях. Дело в том, что ранее для работы моей обработки требовалась внешняя утилита v8unpack, которая распаковывает контейнеры 1с. Благо и здесь имеются публикации приоткрывающие завесу тайны формата контейнера, да и сама утилита имеет открытые исходники, благодаря которым, преимущественно, мне и удалось реализовать свою задумку. При этом желание сэкономить время, зачастую приводит к обратному эффекту, времени тратится на решение значительно больше, чем, если бы этих попыток, сэкономить время, не было. Этот случай не стал исключением (xd). Мне очень не хотелось разворачивать среду работы с С++, вникать в тонкости и детали окружения, в связи с чем в исходниках разбирался исключительно с помощью блокнота, что в значительной степени взорвало мой мозг, подорвало душевное и физическое здоровье. Но не буду утомлять читателя подробностями, главное результат.
Спойлер: Работа с обработкой.
В обработке сохранена возможность работы с файлами распакованными утилитой v8unpack и файлами выгруженными средствами 1с:
Просто нужно указать, с каким форматом будет производиться работа, и перейти к следующему шагу. Далее никаких различий в работе обработки для разных форматов не будет, все действия выполняются единообразно как для формата 1с, так и для файлов распакованных утилитой v8unpack. На следующем шаге необходимо указать папку, в которую был распакован контейнер или выгружены файлы конфигурации/обработки:
Инструкцию о том, как пользоваться утилитой v8unpack, приводить не буду, думаю, любознательный читатель в состоянии сам разобраться с этим, тем более ссылки на статьи источники приведены выше по тексту. А вот процесс выгрузки и загрузки обработки в/из файлов в формате 1с покажу, т.к. при загрузке из файлов сам столкнулся с трудностями. Итак, для сохранения обработки в файлы, необходимо в меню «Действия» выбрать пункт «Выгрузить в файлы»:
Выбрать каталог на диске и нажать кнопку «Сохранить». Именно этот каталог должен быть скормлен обработке «Антидекомпилятор». После того, как файлы подготовлены и антидекомпилятору указан путь к каталогу с файлами можно переходить к следующему шагу. При переходе к которому обработка анализирует содержимое каталога на предмет наличия закрытых модулей (модуль должен быть закрыт паролем, либо не быть включенным в файл поставки), если таковые будут найдены, то откроется окно со списком этих модулей:
Выбираем объекты, которые необходимо защитить от декомпиляции и переходим к следующему шагу. Собственно при переходе к следующему шагу выполняется вся работа по защите байт-кода. Если никаких ошибок в процессе не возникло, появляется окно с соответствующей информацией:
На этом работу с обработкой можно считать завершенной. Теперь требуется загрузить обработку из файла в обработку 1с. Вот тут я столкнулся с трудностями, я так и не смог этого сделать из меню самой обработки:
По моему представлению обработка, из которой была вызвана команда, должна была замениться на ту, которая загружается из файлов. Однако, после того, как платформа запрашивает пароль на закрытый модуль, обработка просто закрывается и все. Поэтому загружать нужно из главного меню «Файл» -> «Открыть», выбираем формат «Обработка или отчет в формате XML (корневой файл)», натравливаем диалог открытия на наш каталог и открываем.
Вот теперь открывается наша обработка с уже измененным байт-кодом, осталось ее сохранить стандартными средствами конфигуратора, после чего ее можно безбоязненно передавать в чужие руки. При попытке декомпилировать такую обработку будут выданы подобные ошибки:
Все тестирования проводились на платформе с номером релиза 8.3.15.1656.
В качестве заключения.
Следует понимать, что автор обработки не ставил перед собой цели разработать продвинутое средство защиты со сложными алгоритмами обфускации байт-кода, шифрованием текстов запросов и т.д. Мне нужен был инструмент, который позволял защитить свою разработку от широко распространенного декомпилятора, с чем, по моему мнению, данная обработка справляется на отлично. Обработка будет интересна, прежде всего, программистам фрилансерам, фирмам франчайзи, да и просто всем, кто интересуется данной темой, в этом случае, конечно, нужно приобретать обработку с открытым исходным кодом.
P.S.
Совсем забыл сказать, если на защищенный модуль ввести пароль в конфигураторе и сохранить обработку, защита будет дезактивирована, т.к. байт-код будет сформирован конфигуратором вновь. Просьба учитывать этот факт и после любого изменения в защищенном модуле, процесс защиты нужно повторять снова.
берем: Антидекомпилятор (закрытый исходный код)
продажник
Предыстория.
Любой разработчик 1с рано или поздно сталкивается с необходимостью защиты своих разработок. Фирма 1с предоставляет встроенные возможности защиты разработок:
Установка пароля на модуль.
Поставка конфигурации без исходных модулей.
При этом большинству программистов 1с известно, что такая защита снимается без особого труда известной обработкой, которая широко распространена в интернете и доступна для свободного скачивания. Когда то давно, лет 8 назад, и мне потребовалась необходимость закрыть код своей разработки до момента оплаты заказчиком выполненной работы, подстраховаться, так сказать. Для такой простой задачи, как оказалось, совершенно не было средств защиты. Все встроенные и бесплатные механизмы защиты снимались без особого труда, а коммерческие средства защиты стоят немалых денег, да и в данном случае были просто неуместны. Как оказалось, информации в свободном доступе по этому вопросу практически нет, пришлось в течении полугода по крупицам собирать информацию на разных форумах, просто выпрашивать у сведущих людей хоть что-то, что могло пролить свет на этот вопрос. И вот спустя полгода поисков и экспериментов я имел на руках некий рабочий инструмент, собранный из обрывков информации, набросков полурабочих обработок, каких-то несвязанных кусков кода, который позволял быстро и бесплатно защитить свою разработку от простого декомпилирования. Признаться, воспользовался я обработкой всего пару раз, забросил в дальний ящик и успешно забыл про нее. Никаких планов публиковать ее не было, т.к. механизмы, используемые в этой обработке, официально не документированы и как будут обстоять дела в этой области, с развитием платформы, было совершенно непонятно. На днях один мой знакомый, обратился ко мне с похожей проблемой, я раскопал свою обработку из далекого ящика и, о чудо, она до сих пор работает, внутренние механизмы платформы за все это время нисколько не изменились. Эта информация вдохновила меня вернуться к этому проекту вновь. Первым делом обработка была переведена на управляемые формы. Как оказалось, за прошедшее время появилось несколько интересных публикаций, которые в значительной степени раскрывают суть работы виртуальной машины 1с, предоставляют неплохо документированные инструкции байт-кода 1с (вот бы эти публикации лет 8 назад, сколько бы времени можно было сэкономить J). Сама 1с добавила возможность выгружать конфигурации и обработки в файлы, что немедленно породило в моей голове идею использовать этот механизм в своих целях. Дело в том, что ранее для работы моей обработки требовалась внешняя утилита v8unpack, которая распаковывает контейнеры 1с. Благо и здесь имеются публикации приоткрывающие завесу тайны формата контейнера, да и сама утилита имеет открытые исходники, благодаря которым, преимущественно, мне и удалось реализовать свою задумку. При этом желание сэкономить время, зачастую приводит к обратному эффекту, времени тратится на решение значительно больше, чем, если бы этих попыток, сэкономить время, не было. Этот случай не стал исключением (xd). Мне очень не хотелось разворачивать среду работы с С++, вникать в тонкости и детали окружения, в связи с чем в исходниках разбирался исключительно с помощью блокнота, что в значительной степени взорвало мой мозг, подорвало душевное и физическое здоровье. Но не буду утомлять читателя подробностями, главное результат.
Спойлер: Работа с обработкой.
В обработке сохранена возможность работы с файлами распакованными утилитой v8unpack и файлами выгруженными средствами 1с:
![proxy.php?image=https%3A%2F%2Finfostart.ru%2Fupload%2Fiblock%2F89e%2F89e85b4c2e7ee7272c75b809924bf53f.png&hash=85e927b2deec3fa82d0abf6c4d7678f3 proxy.php?image=https%3A%2F%2Finfostart.ru%2Fupload%2Fiblock%2F89e%2F89e85b4c2e7ee7272c75b809924bf53f.png&hash=85e927b2deec3fa82d0abf6c4d7678f3](https://skladchik.com/proxy.php?image=https%3A%2F%2Finfostart.ru%2Fupload%2Fiblock%2F89e%2F89e85b4c2e7ee7272c75b809924bf53f.png&hash=85e927b2deec3fa82d0abf6c4d7678f3)
Просто нужно указать, с каким форматом будет производиться работа, и перейти к следующему шагу. Далее никаких различий в работе обработки для разных форматов не будет, все действия выполняются единообразно как для формата 1с, так и для файлов распакованных утилитой v8unpack. На следующем шаге необходимо указать папку, в которую был распакован контейнер или выгружены файлы конфигурации/обработки:
![proxy.php?image=https%3A%2F%2Finfostart.ru%2Fupload%2Fiblock%2F6b4%2F6b453253419e84504656b72fc53108ef.png&hash=8770987a79f714f9225a41dbfaa18214 proxy.php?image=https%3A%2F%2Finfostart.ru%2Fupload%2Fiblock%2F6b4%2F6b453253419e84504656b72fc53108ef.png&hash=8770987a79f714f9225a41dbfaa18214](https://skladchik.com/proxy.php?image=https%3A%2F%2Finfostart.ru%2Fupload%2Fiblock%2F6b4%2F6b453253419e84504656b72fc53108ef.png&hash=8770987a79f714f9225a41dbfaa18214)
Инструкцию о том, как пользоваться утилитой v8unpack, приводить не буду, думаю, любознательный читатель в состоянии сам разобраться с этим, тем более ссылки на статьи источники приведены выше по тексту. А вот процесс выгрузки и загрузки обработки в/из файлов в формате 1с покажу, т.к. при загрузке из файлов сам столкнулся с трудностями. Итак, для сохранения обработки в файлы, необходимо в меню «Действия» выбрать пункт «Выгрузить в файлы»:
![proxy.php?image=https%3A%2F%2Finfostart.ru%2Fupload%2Fiblock%2Fb4b%2Fb4b0008203215556852560e23b120665.png&hash=6ae067811bccc8a9f0fae1759b65b147 proxy.php?image=https%3A%2F%2Finfostart.ru%2Fupload%2Fiblock%2Fb4b%2Fb4b0008203215556852560e23b120665.png&hash=6ae067811bccc8a9f0fae1759b65b147](https://skladchik.com/proxy.php?image=https%3A%2F%2Finfostart.ru%2Fupload%2Fiblock%2Fb4b%2Fb4b0008203215556852560e23b120665.png&hash=6ae067811bccc8a9f0fae1759b65b147)
Выбрать каталог на диске и нажать кнопку «Сохранить». Именно этот каталог должен быть скормлен обработке «Антидекомпилятор». После того, как файлы подготовлены и антидекомпилятору указан путь к каталогу с файлами можно переходить к следующему шагу. При переходе к которому обработка анализирует содержимое каталога на предмет наличия закрытых модулей (модуль должен быть закрыт паролем, либо не быть включенным в файл поставки), если таковые будут найдены, то откроется окно со списком этих модулей:
![proxy.php?image=https%3A%2F%2Finfostart.ru%2Fupload%2Fiblock%2F59d%2F59dffa29233b987890f7ded76a0ee474.png&hash=b8fb881480536800b15ce814e5e76880 proxy.php?image=https%3A%2F%2Finfostart.ru%2Fupload%2Fiblock%2F59d%2F59dffa29233b987890f7ded76a0ee474.png&hash=b8fb881480536800b15ce814e5e76880](https://skladchik.com/proxy.php?image=https%3A%2F%2Finfostart.ru%2Fupload%2Fiblock%2F59d%2F59dffa29233b987890f7ded76a0ee474.png&hash=b8fb881480536800b15ce814e5e76880)
Выбираем объекты, которые необходимо защитить от декомпиляции и переходим к следующему шагу. Собственно при переходе к следующему шагу выполняется вся работа по защите байт-кода. Если никаких ошибок в процессе не возникло, появляется окно с соответствующей информацией:
![proxy.php?image=https%3A%2F%2Finfostart.ru%2Fupload%2Fiblock%2Fed8%2Fed8aea0725e0f07dfdcb4b0e5f876ae0.png&hash=3cfb31c5d43fb8a1756455b81e454584 proxy.php?image=https%3A%2F%2Finfostart.ru%2Fupload%2Fiblock%2Fed8%2Fed8aea0725e0f07dfdcb4b0e5f876ae0.png&hash=3cfb31c5d43fb8a1756455b81e454584](https://skladchik.com/proxy.php?image=https%3A%2F%2Finfostart.ru%2Fupload%2Fiblock%2Fed8%2Fed8aea0725e0f07dfdcb4b0e5f876ae0.png&hash=3cfb31c5d43fb8a1756455b81e454584)
На этом работу с обработкой можно считать завершенной. Теперь требуется загрузить обработку из файла в обработку 1с. Вот тут я столкнулся с трудностями, я так и не смог этого сделать из меню самой обработки:
![proxy.php?image=https%3A%2F%2Finfostart.ru%2Fupload%2Fiblock%2Ff68%2Ff682cf2c112a192426421ffaebc1c9b1.png&hash=628d8269d612d417485de29346598edf proxy.php?image=https%3A%2F%2Finfostart.ru%2Fupload%2Fiblock%2Ff68%2Ff682cf2c112a192426421ffaebc1c9b1.png&hash=628d8269d612d417485de29346598edf](https://skladchik.com/proxy.php?image=https%3A%2F%2Finfostart.ru%2Fupload%2Fiblock%2Ff68%2Ff682cf2c112a192426421ffaebc1c9b1.png&hash=628d8269d612d417485de29346598edf)
По моему представлению обработка, из которой была вызвана команда, должна была замениться на ту, которая загружается из файлов. Однако, после того, как платформа запрашивает пароль на закрытый модуль, обработка просто закрывается и все. Поэтому загружать нужно из главного меню «Файл» -> «Открыть», выбираем формат «Обработка или отчет в формате XML (корневой файл)», натравливаем диалог открытия на наш каталог и открываем.
![proxy.php?image=https%3A%2F%2Finfostart.ru%2Fupload%2Fiblock%2Fd44%2Fd441a321b994cfe9cd3946ab59c99f1d.png&hash=7ec3bc2865e0b2cad52ed750f26d173c proxy.php?image=https%3A%2F%2Finfostart.ru%2Fupload%2Fiblock%2Fd44%2Fd441a321b994cfe9cd3946ab59c99f1d.png&hash=7ec3bc2865e0b2cad52ed750f26d173c](https://skladchik.com/proxy.php?image=https%3A%2F%2Finfostart.ru%2Fupload%2Fiblock%2Fd44%2Fd441a321b994cfe9cd3946ab59c99f1d.png&hash=7ec3bc2865e0b2cad52ed750f26d173c)
Вот теперь открывается наша обработка с уже измененным байт-кодом, осталось ее сохранить стандартными средствами конфигуратора, после чего ее можно безбоязненно передавать в чужие руки. При попытке декомпилировать такую обработку будут выданы подобные ошибки:
![proxy.php?image=https%3A%2F%2Finfostart.ru%2Fupload%2Fiblock%2F3b5%2F3b52dcfd8496ee22d4e9a33ac28991a7.png&hash=8b7ed121e854ba6ee9283fab660dc428 proxy.php?image=https%3A%2F%2Finfostart.ru%2Fupload%2Fiblock%2F3b5%2F3b52dcfd8496ee22d4e9a33ac28991a7.png&hash=8b7ed121e854ba6ee9283fab660dc428](https://skladchik.com/proxy.php?image=https%3A%2F%2Finfostart.ru%2Fupload%2Fiblock%2F3b5%2F3b52dcfd8496ee22d4e9a33ac28991a7.png&hash=8b7ed121e854ba6ee9283fab660dc428)
Все тестирования проводились на платформе с номером релиза 8.3.15.1656.
В качестве заключения.
Следует понимать, что автор обработки не ставил перед собой цели разработать продвинутое средство защиты со сложными алгоритмами обфускации байт-кода, шифрованием текстов запросов и т.д. Мне нужен был инструмент, который позволял защитить свою разработку от широко распространенного декомпилятора, с чем, по моему мнению, данная обработка справляется на отлично. Обработка будет интересна, прежде всего, программистам фрилансерам, фирмам франчайзи, да и просто всем, кто интересуется данной темой, в этом случае, конечно, нужно приобретать обработку с открытым исходным кодом.
P.S.
Совсем забыл сказать, если на защищенный модуль ввести пароль в конфигураторе и сохранить обработку, защита будет дезактивирована, т.к. байт-код будет сформирован конфигуратором вновь. Просьба учитывать этот факт и после любого изменения в защищенном модуле, процесс защиты нужно повторять снова.
берем: Антидекомпилятор (закрытый исходный код)
продажник
Для просмотра содержимого вам необходимо авторизоваться
Для просмотра содержимого вам необходимо авторизоваться