Стоит ли запутывать коммерческое приложение .Net? - PullRequest
36 голосов
/ 16 сентября 2008

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

Ответы [ 16 ]

39 голосов
/ 16 сентября 2008

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

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

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

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

29 голосов
/ 16 сентября 2008

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

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

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

12 голосов
/ 16 сентября 2008

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

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

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

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

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

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

7 голосов
/ 16 сентября 2008

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

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

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

4 голосов
/ 19 апреля 2014

Вещи, которые вы должны учитывать:

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

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

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

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

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

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

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

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

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

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

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

4 голосов
/ 16 сентября 2008

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

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

3 голосов
/ 26 января 2010

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

3 голосов
/ 21 октября 2009

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

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

3 голосов
/ 16 сентября 2008

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

2 голосов
/ 16 сентября 2008

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

...