.NET obfuscation tools/strategy

Мой продукт имеет несколько компонентов: ASP.NET, Windows Forms App и Windows Service. 95% или около того кода написано на VB.NET.

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

Что я знаю, я должен искать до сих пор:

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

Ответ 1

Back с .Net 1.1 obfuscation был необходим: декомпиляция кода была простой, и вы могли перейти от сборки, к IL, к С# -коду и скомпилировать его с минимальными усилиями.

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

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

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

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

Ответ 2

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

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

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

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

Ответ 3

Сейчас я "Колено Глубоко", пытаясь найти хорошее решение. Вот мои впечатления до сих пор.

Xenocode. У меня есть старая лицензия для Xenocode2005, которую я использовал для обфускации моих .net 2.0 сборок. Он отлично работал на XP и был достойным решением. Мой текущий проект -.net 3.5, и я нахожусь в Vista, поддержка сказала мне, чтобы он пошел, но версия 2005 года даже не работает на Vista (сбой), поэтому я и теперь мне нужно купить "PostBuild2008" по цене gobsmacking от $1900. Это может быть хорошим инструментом, но я не собираюсь это выяснять. Слишком дорого.

Reactor.Net. Это гораздо более привлекательная цена, и она отлично работает на моем автономном Executeable. Модуль "Лицензирование" также был приятным и спас бы мне кучу усилий. К сожалению, у него отсутствует ключевая функция, и это возможность исключить материал из обфускации. Это делает невозможным достижение нужного мне результата (объедините несколько сборок вместе, обфускайте некоторые, а не Obfuscate другие).

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

Dotfuscator Pro - Не удалось найти цену на сайте. В настоящее время в дискуссиях для получения цитаты. Звучит зловеще.

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

Примечание. Сообщается, что ConfuserEx "сломан" в соответствии с Issue # 498 в своем репозитории GitHub.

Ответ 4

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


Начиная с 29 июня 2012 г., Eazfuscator.NET теперь коммерческий. Последняя бесплатная версия - 3,3.

Ответ 5

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

Ответ 6

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

Ответ 7

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

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

Ответ 8

Короткий ответ заключается в том, что вы не можете.

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

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

Ответ 9

Crypto Obfuscator описывает все ваши проблемы и сценарии. Это:

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

Ответ 10

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

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

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

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

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

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

Ответ 11

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

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

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

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

Ответ 12

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

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

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

Ответ 13

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

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

Ответ 14

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

Ответ 15

Вы можете использовать "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 - кто-то с достаточным навыком всегда сможет декомпилировать/изменить ваше приложение.

Ответ 16

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

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

Ответ 17

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

Ответ 18

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

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

Ответ 20

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

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

Ответ 21

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

Ответ 22

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

Ответ 23

Мне пришлось использовать защиту obfuscation/resource в моем последнем rpoject и найти Crypto Obfuscator как удобный и простой в использовании инструмент. Проблема сериализации - это только вопрос настроек этого инструмента.

Ответ 24

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

Ответ 25

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

Ответ 26

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

Ответ 27

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

Ответ 28

Я попробовал демо-версию Eziriz.... Мне понравилось. Но никогда не приносили программное обеспечение.

Ответ 29

Обфускация не является реальной защитой.

Если у вас есть файл .NET Exe, есть решение FAR better.

Я использую Themida и могу сказать, что он работает очень хорошо.

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

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

Прочтите подробное описание на своем веб-сайте: http://www.oreans.com/themida_features.php

Ответ 30

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