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

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

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

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

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

30 ответов

Решение

Возвращение к.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 и несколько небольших временных приложений, чьи имена избегают меня.

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

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

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

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

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

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

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

Confuser - проект с открытым исходным кодом, который работает довольно хорошо (чтобы запутать ppl, как следует из названия). 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, объединяет сборки, а также имеет очень хороший модуль лицензирования для создания пробной версии или привязки лицензии к конкретной машине (очень легко внедрить). Цена также очень конкурентоспособна, и когда я нуждался в поддержке, они быстро. Eziriz

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Попробуйте воспользоваться этим сервисом http://morpher.com/

Я использовал это для одного проекта.

Другие вопросы по тегам