Инструменты/стратегия запутывания .NET [закрыто]

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

  •  08-06-2019
  •  | 
  •  

Вопрос

Мой продукт состоит из нескольких компонентов:ASP.NET, приложение Windows Forms и служба Windows.Примерно 95% кода написано на VB.NET.

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

Что я знаю, что мне следует искать на данный момент:

  • Сериализация/десериализация.В моем текущем решении я просто говорю инструменту нет запутывать любые члены данных класса, потому что невозможность загрузить данные, которые были ранее сериализованы, слишком велика.
  • Интеграция с процессом сборки
  • Работа с ASP.NET.Раньше я сталкивался с этой проблемой из-за изменения имен .dll (часто у вас есть одно на страницу), с чем не все инструменты справляются хорошо.
Это было полезно?

Решение

Возвращаясь к .Net 1.1, обфускация была необходима:декомпиляция кода была простой, и вы могли перейти от сборки к IL, к коду C# и снова скомпилировать его с минимальными усилиями.

Теперь с .Net 3.5 я совсем не уверен.Попробуйте декомпилировать сборку 3.5;то, что вы получаете, еще очень далеко от компиляции.

Добавьте оптимизацию из версии 3.5 (намного лучше, чем 1.1) и то, как анонимные типы, делегаты и т. д. обрабатываются посредством отражения (их перекомпиляция — кошмар).Добавьте лямбда-выражения, «волшебство» компилятора, такое как Linq-синтаксис и var, и функции C#2, такие как yield (что приводит к появлению новых классов с нечитаемыми именами).Ваш декомпилированный код окажется очень далёк от компиляции.

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

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

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

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

Мы попробовали DotFuscator Pro, SmartAssembly, XenoCode, Salamander и несколько небольших приложений, названия которых ускользают от меня.

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

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

Я сейчас «по колено» в этом, пытаюсь найти хорошее решение.Вот мои впечатления на данный момент.

Ксенокод — У меня есть старая лицензия на Xenocode2005, которую я использовал для запутывания своих сборок .net 2.0.Он отлично работал на XP и был достойным решением.Мой текущий проект — .net 3.5, и я использую Vista, служба поддержки посоветовала мне попробовать, но версия 2005 года даже не работает в Vista (вылетает), поэтому мне и теперь приходится покупать PostBuild2008 по ошеломляющей цене. в размере 1900 долларов США.Возможно, это хороший инструмент, но я не собираюсь это выяснять.Слишком дорого.

Реактор.Нет - Это гораздо более привлекательная цена, и она отлично работала на моем автономном исполняемом файле.Модуль лицензирования тоже был хорош и сэкономил бы мне кучу усилий.К сожалению, в нем отсутствует ключевая функция — возможность исключать данные из обфускации.Это делает невозможным достижение нужного мне результата (объединить несколько сборок вместе, запутать некоторые, не запутать другие).

СмартАссамблея - Для этого я скачал Eval, и он работал безупречно.Я смог добиться всего, чего хотел, и интерфейс был первоклассным.Цена все еще немного высока.

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

Конфузор - проект с открытым исходным кодом, который работает довольно хорошо (чтобы запутать людей, как следует из названия). https://confuser.codeplex.com/
(добавил jgauffin)

Примечание:Сообщается, что ConfuserEx «сломан» Выпуск № 498 в их репозитории GitHub.

Если вы ищете бесплатную версию, вы можете попробовать DotObfuscator Community Edition, который поставляется с Visual Studio или Eazfuscator.NET.


С 29 июня 2012 г., Eazfuscator.NET теперь является коммерческим.Последняя бесплатная доступная версия — 3.3.

Я использую smartassembly.По сути, вы выбираете dll, и она возвращает ее в запутанном виде.Кажется, все работает нормально, и до сих пор у меня не было никаких проблем.Очень, очень прост в использовании.

Я перепробовал почти все обфускаторы, представленные на рынке, и SmartAssembly, на мой взгляд, лучший.

Я также использую SmartAssembly.Я обнаружил, что Ezrinz .Net Reactor намного лучше подходит для приложений .net.Он запутывает, поддерживает Mono, объединяет сборки, а также имеет очень хороший модуль лицензирования для создания пробной версии или привязки лицензии к конкретной машине (очень легко реализовать).Цена также очень конкурентоспособная, и когда мне понадобилась поддержка, они оказали ее быстро.Эзириз

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

Короткий ответ: вы не можете.

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

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

У нас есть многоуровневое приложение с интерфейсом asp.net и winform, которое также поддерживает удаленное взаимодействие.У меня не было проблем с использованием любого обфускатора, за исключением типа шифрования, который генерирует загрузчик, который может быть проблематичным в самых неожиданных случаях и, на мой взгляд, просто не стоит того.На самом деле мой совет был бы больше похож на «Избегайте шифрования обфускаторов типа загрузчика, как чумы».:)

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

На протяжении многих лет мы использовали несколько из них в наших коммерческих приложениях и остановились на обфускаторе Spices от 9rays.net, потому что цена приемлемая, он выполняет свою работу и имеет хорошую поддержку, хотя поддержка нам действительно не нужна уже много лет, но, честно говоря, Я не думаю, что действительно имеет значение, какой обфускатор вы используете, проблемы и время обучения одинаковы, если вы хотите, чтобы он правильно работал с удаленным взаимодействием и asp.net.

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

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

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

Последние два дня я экспериментировал с расширенной версией Dotfuscator Community Edition (бесплатную загрузку после регистрации базовой версии CE, которая поставляется в комплекте с Visual Studio).

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

Я пытался запутать реальный проект, основанный на VSTO в Excel, с интеграцией Virtual Earth, множеством вызовов веб-сервисов, контейнером IOC и множеством размышлений.Это было невозможно.

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

Криптообфускатор решить все ваши проблемы и сценарии.Это :

  1. Автоматически исключает типы/члены из обфускации на основе правил.Сериализованные типы/поля являются одними из них.
  2. Его можно интегрировать в процесс сборки с помощью MSBUild.
  3. Поддерживает проекты ASP.Net.

Недавно я попробовал передать выходные данные одного бесплатного обфускатора в другой бесплатный обфускатор, а именно Dotfuscator CE и новый обфускатор Babel на CodePlex.Подробнее в моем блоге.

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

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

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

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

У меня не было проблем со Smartassembly.

Вы можете использовать «Dotfuscator Community Edition» — он входит в состав Visual Studio 2008 Professional по умолчанию.Вы можете прочитать об этом по адресу:

http://msdn.microsoft.com/en-us/library/ms227240%28VS.80%29.aspx
http://www.preemptive.com/dotfuscator.html

«Профессиональная» версия продукта стоит денег, но она лучше.

Вам действительно нужно, чтобы ваш код был запутан?Обычно в декомпиляции вашего приложения нет ничего плохого, если только оно не используется в целях безопасности.Если вы беспокоитесь о том, что люди «укрут» ваш код, не беспокойтесь;подавляющее большинство людей будут просматривать ваш код с целью обучения.В любом случае, для .NET не существует абсолютно эффективной стратегии запутывания — кто-то с достаточными навыками всегда сможет декомпилировать/изменить ваше приложение.

Избегайте Реактора.Это совершенно бесполезно (и да, я заплатил за лицензию).Xenocode был лучшим из тех, с которыми я когда-либо сталкивался, и на него я тоже купил лицензию.Поддержка была очень хорошей, но она мне не особо была нужна, поскольку она просто работала.Я протестировал каждый обфускатор, который смог найти, и пришел к выводу, что ксенокод был, вне всякого сомнения, самым надежным и выполнял лучшую работу (а также возможность отправить обработку вашего .NET exe-файла в собственный exe-файл, которого я больше нигде не видел).

Есть два основных различия между реактором и ксенокодом.Во-первых, ксенокод действительно работает.Во-вторых, скорость выполнения ваших сборок ничем не отличается.С реактором это было примерно в 6 миллионов раз медленнее.У меня также сложилось впечатление, что реактор работал один человек.

Я обнаружил, что Agile.Net обеспечивает довольно хорошую защиту вашей сборки .Net, поскольку предлагает не только запутывание, но и шифрование.Загрузите бесплатный маршрут.
http://secureteam.net/NET-Code-Protection.aspx http://secureteam.net/downloads.aspx

Я запутывал код в одном и том же приложении, начиная с .Net 1, и это было большой головной болью с точки зрения обслуживания.Как вы упомянули, проблемы сериализации можно избежать, но очень легко допустить ошибку и запутать то, что вы не хотели запутывать.Легко сломать сборку или изменить шаблон обфускации и не иметь возможности открывать старые файлы.Кроме того, может быть сложно выяснить, что и где пошло не так.

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

Вот документ от самой Microsoft. Надеюсь, это поможет... это из 2003 года, но может быть еще актуально.

Мы используем SmartAssembly в нашем клиенте Windows.Работает просто отлично.

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

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

бесплатный способ — использовать dotfuscator из Visual Studio, в противном случае вам придется пойти и купить обфускатор, такой как Postbuild (http://www.xenocode.com/Landing/Obfuscation.aspx)

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

Есть хорошая версия с открытым исходным кодом под названием Obfuscar.Кажется, работает нормально.Типы, свойства, поля, методы могут быть исключены.Оригинал здесь: https://code.google.com/p/obfuscar/, но, похоже, он больше не обновляется, кто-то перекинул его сюда: https://obfuscar.codeplex.com/

Вы также можете рассмотреть новые технологии защиты кода, такие как Метафорический и ВиЛабс и новые технологии защиты программного обеспечения от копирования, такие как БайтЩилд.Раскрытие информации:Я работаю в ByteShield.

Я также использую smartassembly.Однако я не знаю, как это работает для веб-приложения.Однако я хотел бы отметить, что если ваше приложение использует защиту условно-бесплатного типа, убедитесь, что оно не проверяет лицензию с помощью логического возврата.слишком легко взломать байт.http://blogs.compdj.com/post/Binary-hack-a-NET-executable.aspx

SmartAssembly великолепен, я использовал его в большинстве своих проектов.

Попробовал демо-версию Eziriz....мне понравилось.Но так и не принес софт.

Запутывание не является настоящей защитой.

Если у вас есть файл .NET Exe, существует Гораздо лучше решение.

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

Единственным недостатком Themida является то, что она не может защитить библиотеки .NET Dll.(Он также защищает код C++ в Exe и DLL)

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

Пожалуйста, прочитайте подробное описание на их сайте:http://www.oreans.com/themida_features.php

Я попробовал продукт под названием Rummage, и он дает вам хороший контроль...Хотя здесь не хватает многих вещей, которые предлагает Эзириз, но цена на Руммадж слишком хороша...

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