Инструменты/стратегия запутывания .NET [закрыто]
-
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 и множеством размышлений.Это было невозможно.
Если запутывание действительно является критическим требованием, вам следует с самого начала проектировать свое приложение с учетом этого, тестируя обфусцированные сборки по мере продвижения.В противном случае, если это довольно сложный проект, вы столкнетесь с серьезными трудностями.
Криптообфускатор решить все ваши проблемы и сценарии.Это :
- Автоматически исключает типы/члены из обфускации на основе правил.Сериализованные типы/поля являются одними из них.
- Его можно интегрировать в процесс сборки с помощью MSBUild.
- Поддерживает проекты 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, и он дает вам хороший контроль...Хотя здесь не хватает многих вещей, которые предлагает Эзириз, но цена на Руммадж слишком хороша...