Стоит ли запутывать коммерческое приложение .Net?

StackOverflow https://stackoverflow.com/questions/71195

  •  09-06-2019
  •  | 
  •  

Вопрос

Я думал о том, чтобы запутать коммерческое приложение .Net.Но стоит ли затрачивать усилия на выбор, покупку и использование такого инструмента?Действительно ли запутанные двоичные файлы защищены от обратного проектирования?

Это было полезно?

Решение

Возможно, вам не придется покупать инструмент — Visual Studio.NET поставляется с общедоступной версией Dotfuscator.Другие бесплатные инструменты запутывания перечислены здесь, и они могут удовлетворить ваши потребности.

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

Кроме того, если когда-нибудь придет время отстаивать свои права на часть кода в суде, то, что вы будете замечены в попытке защитить его (путем его запутывания), вы можете получить дополнительные баллы.:-)

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

Другие советы

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

Если в вашем коде есть секреты (например, пароли), вы делаете это неправильно.

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

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

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

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

В конце концов мы остановились на продукте под названием .NET-реактор

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

«В отличие от обфускаторов, .NET Reactor полностью останавливает любую декомпиляцию, смешивая любую чистую сборку .NET (написанную на C#, VB.NET, Delphi.NET, J#, MSIL...) с собственным машинным кодом.Если говорить более подробно, .NET Reactor возводит внутреннюю стену между потенциальными хакерами и вашим кодом .NET.В результате получается стандартный файл для Windows, не совместимый с MSIL.Исходный код .NET остается нетронутым, хорошо защищен собственным кодом и невидим для посторонних глаз.Исходный код .NET никогда не копируется на жесткий диск.Не существует инструмента, способного декомпилировать сборки, защищенные .NET Reactor».

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

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

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

Я думаю, что это зависит от типа вашего продукта.Если его предназначают для использования разработчиками, запутывание нанесет вред вашим клиентам.Мы используем продукты ArcGIS на работе, и все библиотеки DLL запутаны.Это значительно усложняет нашу работу, поскольку мы не можем использовать Reflector для расшифровки странного поведения.И мы покупаем клиентов, которые заплатили за продукт тысячи долларов.

Поэтому, пожалуйста, не запутывайте, если вам действительно не нужно.

Вещи, которые вы должны принять во внимание:

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

Единственная проблема, которую может решить обфускация, заключается в том, что кто-то создает копию вашей конкретной реализации в соотношении 1:1 (или близко к 1:1).

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

Но вернемся к реальности:

  • На этой планете не существует инструмента, который мешал бы кому-либо копировать пользовательские интерфейсы, поведение или результаты, предоставляемые или производимые любым приложением. Обфускация в таких ситуациях бесполезна на 100%.
  • Лучший обфускатор на рынке не может помешать использовать какой-нибудь дизассемблер или шестнадцатеричный редактор. и для некоторых компьютерных фанатов это очень полезно — заглянуть в суть приложения.Это просто сложнее, чем с незашифрованным кодом.

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

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

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

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

Поэтому вам следует сначала подумать о своих целях, своем рынке и о том, чего вы хотите достичь с помощью обфускатора. Как вы можете прочитать здесь (и в других местах), обфускация на самом деле не решает проблему обратного проектирования.Это только усложняет задачу и отнимает больше времени. Но если это то, что вы хотите, вы можете взглянуть на обфускаторы с открытым исходным кодом, например.SharpObfuscator или obfuscar, которые могут быть достаточно хороши, чтобы досаждать обычным программистам (список можно найти здесь: Список обфускаторов .NET в Википедии).

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

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

Мне очень удобно читать ассемблерный код x86. А как насчет людей, которые работают с ассемблером более 20 лет?

Вы всегда найдете кого-то, кому понадобится всего минута, чтобы увидеть, что делает ваш код на C# или C...

Просто примечание для тех, кто читает это много лет спустя: я только что просмотрел лицензию Dotfuscator Community Edition (которая поставляется с VS2008) несколько часов назад, и я считаю, что вы не можете использовать эту версию для распространения коммерческого продукта или для запутывания кода. из проекта, в котором участвуют другие разработчики, кроме вас.Так что для разработчиков коммерческих приложений это всего лишь пробная версия.

...отрезать...Эти сообщения могут стать гораздо сложнее интерпретировать

Да, но бесплатная версия сообщества, поставляемая с Visual Studio, имеет функцию карты.Благодаря этому вы можете отследить запутанные имена методов до исходных имен.

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

Реконструировать приложение .net довольно просто, используя .net отражатель - поскольку приложение будет генерировать код VB, VC и C# прямо из MSIL, и можно извлекать всевозможные полезные драгоценности.

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

Есть довольно хорошая статья об обфускации, и она работает здесь.

Эта почта и окружающий вопрос требует некоторого обсуждения, которое может иметь ценность.Это не вопрос «да» или «нет».

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

Проблема в том, какой инструмент выбрать для работы.Ознакомьтесь с моим опытом работы с коммерческими обфускаторами: https://stackoverflow.com/questions/337134/what-is-the-best-net-obfuscator-on-the-market/2356575#2356575

Да.Мы используем обфускатор BitHelmet.Он новый, но работает очень хорошо.

Но стоит ли затрачивать усилия на выбор, покупку и использование такого инструмента?

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top