Мой продукт состоит из нескольких компонентов: ASP.NET, Windows Forms App и Windows Service. Примерно 95% кода написано на VB.NET.
По соображениям интеллектуальной собственности мне нужно запутать код, и до сих пор я использовал версию dotfuscator, которой уже более 5 лет. Я думаю, что пришло время перейти к инструменту нового поколения. То, что я ищу, это список требований, которые я должен учитывать при поиске нового обфускатора.
То, что я знаю, я должен искать до сих пор:
- Сериализация / Десериализация . В моем текущем решении я просто говорю инструменту не запутывать никакие члены данных класса, потому что боль невозможности загружать данные, которые были ранее сериализованы, просто слишком велика.
- Интеграция с процессом сборки
- Работа с ASP.NET . В прошлом я находил это проблематичным из-за изменения имен .dll (у вас часто есть по одному на страницу) - что не все инструменты обрабатывают хорошо.
.net
security
obfuscation
csmba
источник
источник
Ответы:
Возвращение к .Net 1.1 было необходимо, чтобы обфускация была простой: декомпиляция кода была простой, и вы могли перейти от ассемблера к IL, к коду C # и снова скомпилировать его без особых усилий.
Теперь с .Net 3.5 я совсем не уверен. Попробуйте декомпилировать сборку 3.5; то, что вы получаете, очень далеко от компиляции.
Добавьте оптимизацию от 3.5 (намного лучше, чем 1.1) и то, как анонимные типы, делегаты и т. Д. Обрабатываются с помощью рефлексии (это кошмар для перекомпиляции). Добавьте лямбда-выражения, «магию» компилятора, такую как синтаксис Linq и
var
, и функции C # 2yield
(что приводит к появлению новых классов с нечитаемыми именами). Ваш декомпилированный код заканчивает длинный путь от компилируемого.Профессиональная команда с большим количеством времени все еще может перепроектировать это снова, но то же самое верно для любого запутанного кода. То, какой код они получили из этого, было бы непоправимым и, скорее всего, очень глючным.
Я бы порекомендовал подписать ключи вашими сборками (то есть, если хакеры могут перекомпилировать одну, они должны перекомпилировать все), но я не думаю, что запутывание того стоит.
источник
Мы попробовали несколько обфускаторов. Ни один из них не работает в большом клиент-серверном приложении, которое использует удаленное взаимодействие. Проблема в том, что клиент и сервер совместно используют некоторые библиотеки 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 - Не удалось найти цену на веб-сайте. В настоящее время в обсуждениях, чтобы получить цитату. Звучит зловеще.
конфузор - проект с открытым исходным кодом, который работает довольно хорошо (чтобы запутать ppl, как следует из названия).
Примечание: 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
Просто чтобы быть ясным, я просто клиент, который любит продукт и никак не связан с компанией.
источник
Короткий ответ: ты не можешь.
Существуют различные инструменты, которые затруднят чтение вашего кода - некоторые из них были указаны в других ответах.
Однако все, что они делают, это затрудняет чтение - они увеличивают количество требуемых усилий, вот и все. Часто этого достаточно, чтобы удержать случайных читателей, но тот, кто полон решимости покопаться в вашем коде, всегда сможет это сделать.
источник
Operator '>' cannot be applied to operands of type 'System.TimeSpan' and 'decimal'
У нас есть многоуровневое приложение с интерфейсом 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 и множеством размышлений. Это было невозможно
Если запутывание действительно является критически важным требованием, вы должны с самого начала разрабатывать свое приложение с учетом этого, тестируя обфусцированные сборки по мере продвижения. В противном случае, если это довольно сложный проект, вы столкнетесь с серьезной болью.
источник
Crypto Obfuscator решить все ваши проблемы и сценарии. Это :
источник
Недавно я попытался передать вывод одного бесплатного обфускатора в другой бесплатный обфускатор, а именно Dotfuscator CE и новый обфускатор Babel на CodePlex. Подробнее в моем блоге .
Что касается сериализации, я переместил этот код в другую DLL и включил его в проект. Я пришел к выводу, что там не было никаких секретов, которых нет в XML, так что он не нуждался в запутывании. Если в этих классах есть какой-либо серьезный код, его следует использовать с помощью частичных классов в основной сборке.
источник
Вы должны использовать все, что дешевле и лучше всего известно для вашей платформы, и называть это днем. Запутывание языков высокого уровня - сложная проблема, потому что потоки кода операции VM не страдают от двух самых больших проблем, которые делают собственные потоки кода операции: идентификация функции / метода и псевдоним регистра.
Что вы должны знать о реверсировании байт-кода, так это о том, что для тестировщиков безопасности уже является обычной практикой просмотр прямого кода X86 и поиск в нем уязвимостей. В сыром X86 вы не обязательно можете даже найти допустимые функции, не говоря уже о том, чтобы отслеживать локальную переменную во время вызова функции. Практически ни при каких условиях нативные реверсоры кода не имеют доступа к именам функций и переменных - если только они не проверяют код Microsoft, для которого MSFT услужливо предоставляет эту информацию общественности.
«Dotfuscation» работает главным образом путем скремблирования имен функций и переменных. Вероятно, лучше сделать это, чем публиковать код с информацией уровня отладки, когда 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, который я больше нигде не видел).
Существует два основных различия между реактором и ксенокодом. Во-первых, Xenocode действительно работает. Во-вторых, скорость выполнения ваших сборок ничем не отличается. С реактором это было примерно в 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 ).
источник
Мне пришлось использовать защиту от запутывания / ресурсов в моем последнем rpoject, и я обнаружил, что Crypto Obfuscator - хороший и простой в использовании инструмент. Проблема сериализации - только вопрос настроек в этом инструменте.
источник
Есть хорошая версия с открытым исходным кодом под названием Obfuscar. Кажется, работает нормально. Типы, свойства, поля, методы могут быть исключены. Оригинал здесь: https://code.google.com/p/obfuscar/ , но, похоже, он больше не обновляется.
источник
Возможно, вы также захотите взглянуть на новые технологии защиты кода, такие как Metaforic и ViLabs, и новые технологии защиты программного обеспечения от копирования, такие как ByteShield . Раскрытие информации: я работаю на ByteShield.
источник
Я также использую smartassembly. Однако я не знаю, как это работает для веб-приложения. Однако я хотел бы отметить, что если ваше приложение использует условно-бесплатную защиту типов, убедитесь, что оно не проверяет лицензию с логическим возвратом. слишком легко взломать байт. http://blogs.compdj.com/post/Binary-hack-a-NET-executable.aspx
источник
SmartAssembly отлично, меня использовали в большинстве моих проектов
источник
Я попробовал демо-версию Eziriz .... Мне понравилось. Но никогда не приносил программное обеспечение.
источник
Запутывание не настоящая защита.
Если у вас есть файл .NET Exe, то есть FAR лучшее решение.
Я использую Themida и могу сказать, что это работает очень хорошо.
Единственным недостатком Themida является то, что он не может защитить .NET Dlls. (Он также защищает код C ++ в Exe и DLL)
Themida это намного дешевле , чем здесь упомянутых обфускаторы и является лучшим в борьбе с пиратством защиты от на рынке. Он создает виртуальную машину, в которой выполняются критические части вашего кода, и запускает несколько потоков, которые обнаруживают манипуляции или точки останова, установленные взломщиком. Он преобразует .NET Exe в нечто, что Reflector даже не распознает как сборку .NET.
Пожалуйста, прочитайте подробное описание на их сайте: http://www.oreans.com/themida_features.php
источник
Я попробовал продукт под названием Rummage, и он хорошо справляется с задачей, предоставляя вам некоторый контроль ... Хотя Eziriz не хватает многих вещей, которые предлагает Eziriz, но цена на Rummage слишком высока ...
источник