Сведения о вопросе

HOLY

16:03, 1st July, 2020

Теги

.net   security   obfuscation    

Инструменты/стратегия обфускации .NET

Просмотров: 898   Ответов: 25

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

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

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

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



  Сведения об ответе

pumpa

18:03, 1st July, 2020

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

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

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

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


  Сведения об ответе

SKY

18:03, 1st July, 2020

Сейчас я занимаюсь этим 'Knee Deep', пытаясь найти хорошее решение. Вот мои впечатления до сих пор.

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

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

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

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

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

Примечание: ConfuserEx, как сообщается, является "broken" в соответствии с выпуском #498 по их GitHub РЕПО.


  Сведения об ответе

#hash

18:03, 1st July, 2020

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

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

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

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

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


  Сведения об ответе

ITSME

18:03, 1st July, 2020

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


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


  Сведения об ответе

baggs

18:03, 1st July, 2020

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


  Сведения об ответе

SSESION

18:03, 1st July, 2020

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


  Сведения об ответе

P_S_S

18:03, 1st July, 2020

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

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


  Сведения об ответе

dump

18:03, 1st July, 2020

Короче говоря, вы не можете этого сделать.

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

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


  Сведения об ответе

DO__IT

18:03, 1st July, 2020

У нас есть многоуровневое приложение с интерфейсом asp.net и winform, которое также поддерживает удаленное взаимодействие. У меня не было никаких проблем с использованием любого обфускатора, за исключением типа шифрования, который генерирует загрузчик, который может быть проблематичным во всех видах неожиданных способов и просто не стоит этого, на мой взгляд. На самом деле мой совет был бы больше похож на "Avoid encrypting loader type obfuscators like the plague". :)

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

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

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

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

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


  Сведения об ответе

ASER

18:03, 1st July, 2020

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

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


  Сведения об ответе

appple

18:03, 1st July, 2020

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

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

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

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


  Сведения об ответе

lats

18:03, 1st July, 2020

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

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


  Сведения об ответе

dumai

18:03, 1st July, 2020

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

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


  Сведения об ответе

ASSembler

18:03, 1st July, 2020

Вы можете использовать "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

Версия "Professional" продукта стоит денег, но лучше.

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


  Сведения об ответе

darknet

18:03, 1st July, 2020

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

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

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


  Сведения об ответе

davran

18:03, 1st July, 2020

У меня не было никаких проблем с Smartassembly.


  Сведения об ответе

VERSUION

18:03, 1st July, 2020

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


  Сведения об ответе

padenie

18:03, 1st July, 2020

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


  Сведения об ответе

piter

18:03, 1st July, 2020

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

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


  Сведения об ответе

DO__IT

18:03, 1st July, 2020

Я должен был использовать обфускацию / защиту ресурсов в моем последнем проекте RPO и нашел Crypto Obfuscator как хороший и простой в использовании инструмент. Проблема сериализации - это только вопрос настроек в этом инструменте.


  Сведения об ответе

ASSembler

18:03, 1st July, 2020

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


  Сведения об ответе

#hash

18:03, 1st July, 2020

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


  Сведения об ответе

ASSembler

18:03, 1st July, 2020

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

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


  Сведения об ответе

VCe znayu

18:03, 1st July, 2020

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


  Сведения об ответе

dump

18:03, 1st July, 2020

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться