В моем продукте есть несколько компонентов: ASP.NET, приложение Windows Forms и служба Windows. Примерно 95% кода написано на VB.NET.
По причинам интеллектуальной собственности мне нужно обфускировать код, и до сих пор я использовал версию dotfuscator, которой уже более 5 лет. Думаю, пора переходить на инструмент нового поколения. Я ищу список требований, которые я должен учитывать при поиске нового обфускатора.
То, что я знаю, мне следует искать до сих пор:
См .: msdn.microsoft.com/en-us/vcsharp/aa336818.aspx#obfuscators
См. Обфускатор Agile.net .NET для альтернативного решения для обфускации вашего кода. В частности, проверьте его функцию виртуализации кода.
См. Хороший список обфускаторов от ArmDot до Xenocode здесь, на SO: stackoverflow.com/a/60054/1480104





Пользуюсь smartassembly. По сути, вы выбираете dll, и она возвращает ее в запутанном виде. Кажется, все работает нормально, и пока проблем не было. Очень и очень проста в использовании.
Smartassembly совершенно бесполезен. Взломщик помещает ваше приложение в DumbAssembly, и вся "защита" удаляется щелчком мыши: woodmann.com/collaborative/tools/index.php/Dumbassembly
На данный момент безопасный просмотр в Google помечает сайт woodmann как небезопасный. Кроме того, на сайте Вудмана есть целая статья о том, что он ранее страдал от заражения вредоносным ПО, поэтому я действительно не хочу перемещаться по его сайту, когда Google ему не доверяет.
Если вы ищете бесплатную версию, вы можете попробовать DotObfuscator Community Edition, которая поставляется с Visual Studio или Eazfuscator.NET.
С 29 июня 2012 г., Eazfuscator.NET теперь коммерческий. Последняя доступная бесплатная версия - 3.3.
Я перепробовал почти все обфускаторы на рынке, и SmartAssembly, на мой взгляд, лучший.
Smartassembly совершенно бесполезен. Взломщик помещает ваше приложение в DumbAssembly, и вся "защита" удаляется щелчком мыши: woodmann.com/collaborative/tools/index.php/Dumbassembly
На данный момент безопасный просмотр в Google помечает сайт woodmann как небезопасный. Кроме того, на сайте Вудмана есть целая статья о том, что он ранее страдал от заражения вредоносным ПО, поэтому я действительно не хочу перемещаться по его сайту, когда Google ему не доверяет.
Мы пробовали несколько обфускаторов. Ни один из них не работает с большим клиент-серверным приложением, использующим удаленное взаимодействие. Проблема в том, что у клиента и сервера есть общие библиотеки DLL, и мы не нашли никакого обфускатора, который мог бы с этим справиться.
Мы пробовали DotFuscator Pro, SmartAssembly, XenoCode, Salamander и несколько небольших приложений, названия которых ускользают от меня.
Честно говоря, я убежден, что обфускация - это большой хакер.
Даже проблемы, которые он решает, не совсем реальная проблема. Единственное, что вам действительно нужно защитить, - это строки подключения, коды активации и тому подобное. Эта чушь, что другая компания собирается перепроектировать всю вашу кодовую базу и создать из нее конкурирующий продукт, - это кошмар параноидального менеджера, а не реальность.
Большинство инструментов обфускации имеют возможность исключать классы или методы и т.д ... на самом деле Dotfuscator вводил функцию, которая, если бы обнаружила определенные использования классов, она автоматически исключила бы ее для вас.
Сам Dotfuscator - это клиент-серверное приложение, использующее веб-службы (если вы включили их функции SoS), а Dotfuscator действительно использует себя для обфускации себя. Так что это не должно быть проблемой
Браво, Иуда! Единственный способ оставаться впереди - разрабатывать новый, лучший код, а не цепляться за уже написанный вами код. В конечном итоге вы вкладываете время, силы и, возможно, даже деньги во что-то, что не имеет отношения к делу. Обфускация не стоит.
Вот почему мне не нравится эта система репутации, у вас 19 голосов, и вы не ответили. Пользователь не спрашивает ваше мнение об обфускации, он хочет узнать больше о методах обфускации.
Я предоставил информацию о своем опыте использования нескольких существующих обфускаторов. И мое мнение основано на этом опыте.
+1 за «Честно говоря, я убежден, что обфускация - это большой хакер». Вы не могли бы выразить это лучше, чем это.
Очень актуальная потребность в защите вашего кода - это продажа дорогих специализированных приложений компаниям, которые будут использовать их внутри компании всего с несколькими пользователями. Возникает соблазн перевернуть код, чтобы разрешить внутренний взлом и модификации для своих собственных целей, избежать контрактов на обслуживание или даже взломать пробные версии, чтобы получить нужные им полезности.
Хотя я получаю обратную косую черту 17, как человек, исследующий тему, я всегда нахожу это полезным для обсуждения профессионалами того, нужна ли тема или нет. Иногда для меня наиболее полезными являются такие обсуждения.
Несмотря на то, что это ответ из 2009 года, я не могу не оставить комментарий. Это самый наивный ответ, который я когда-либо видел в Интернете, когда он набирал столько голосов. и если вам интересно, зачем кому-то когда-либо захочется перепроектировать приложения, вы никогда не узнаете, потому что эти люди не поделятся с вами своими мотивами. Но просто продолжайте и не используйте обфускацию .... Ваше приложение станет конфетной лавкой для ваших конкурентов.
@ user1841243 Но этого не происходит. Это как бугай: о нет, эти неизвестные люди где-то там могут просто взглянуть на скомпилированный IL и выплюнуть сгенерированный машиной C# без комментариев! Но подумайте об этом - зачем им это? Создать конкурирующий продукт? Этого не бывает; это открывает компанию для судебного иска. Вещи, связанные с безопасностью? Вот когда вы используете шифрование.
В этом нет ничего параноидального. Люди могут загрузить инструмент и увидеть большую часть вашего точного исходного кода. Для меня это не имеет абсолютно ничего общего с тем, что люди декомпилируют, а затем повторно компилируют в качестве нового приложения, это связано с тем, что фрагменты моего исходного кода используются без моего разрешения. Очевидно, каждое приложение должно быть только с открытым исходным кодом? Если вы не защищаете свой исходный код, то в конечном итоге он становится именно таким. У меня большой опыт в этом, и, глядя на мой собственный код, большая часть декомпилированного кода точно такая же, как я его написал. Там даже мои комментарии.
Если вы собираетесь оставить свое мнение в будущем, не делайте его абсолютным, уточните, когда и где ваше мнение применимо. Вот (не оптимизированный) пример: вы выпускаете новую технологию компрессора для партнеров и не знаете, запатентоваете ли вы ее - обфускация делает очень маловероятным, что они попытаются ее реконструировать.
Infiniminer, источник вдохновения для Minecraft, был оставлен после того, как разработчик выпустил «необфусцированную сборку .NET», что привело к тому, что сообщество сделало несколько клонов, каждый со своими собственными решениями по балансировке (очевидно, сам Minecraft был написан на Java, поэтому он не действительно посчитать). Суть в том, что это не бугай, такое бывает, и есть по крайней мере один известный пример.
Вернувшись к .Net 1.1, обфускация была необходима: декомпилировать код было легко, и вы могли перейти от сборки к IL, к коду C# и снова скомпилировать его с очень небольшими усилиями.
Теперь с .Net 3.5 я совсем не уверен. Попробуйте декомпилировать сборку 3.5; то, что вы получаете, очень далеко от компиляции.
Добавьте оптимизацию из 3.5 (намного лучше, чем 1.1) и то, как анонимные типы, делегаты и т. д. Обрабатываются отражением (перекомпиляция - кошмар). Добавьте лямбда-выражения, «волшебство» компилятора, такое как Linq-синтаксис и var, и функции C# 2, такие как yield (что приводит к появлению новых классов с нечитаемыми именами). Ваш декомпилированный код далек от компилируемого.
Профессиональная команда, у которой много времени, все еще может перепроектировать его снова, но тогда то же самое можно сказать и о любом запутанном коде. Какой код они извлекут из этого, будет невозможно поддерживать и, скорее всего, будет содержать много ошибок.
Я бы рекомендовал подписывать ваши сборки ключами (то есть, если хакеры могут перекомпилировать одну, они должны перекомпилировать все), но я не думаю, что обфускация того стоит.
Совершенно не согласен. Подписание не может заменить обфускацию. Подписание направлено против взлома вашего кода. Но если вы что скрываете свою идею, алгоритмы и т. д., То обфускация - единственный способ.
Я не думаю, что подписание может заменить обфускацию, это только усложняет взлом. Обфускация не может скрыть вашу идею - если они захотят скопировать, они все равно это сделают, а обфускация даже не сделает это намного сложнее. В частности, поскольку все алгоритмы представляют собой операторы, обфускация не оказывает на них большого влияния - обычно их легче всего извлечь.
Обфускация может не стоить того, если вы говорите о команде с большим количеством доступных ресурсов, но обфускация отлично подходит для защиты от «среднего» разработчика, который не хочет ничего, кроме использования Reflector, чтобы открыть вашу сборку и сохранить исходный код. как проект и вносим коррективы. Обфускация имеет место, и полностью исключать ее - неправильное отношение. Это слой защиты.
@VincePanuccio Вы упускаете мою мысль: средний разработчик не сможет декомпилировать какой-либо проект .Net> = версии 2 и получить что-то компилируемое благодаря всей «магии» компилятора в более поздних версиях. Обфускация - это проблема, которую нужно поддерживать, и она добавляет огромные накладные расходы на исследование каждой ошибки / трассировки стека, но она не останавливает никого, решительно настроенных и даже не замедляет случайного копирования-пастера, использующего один или два метода. Это дорогой и слабый слой защиты, который того не стоит.
Когда вы декомпилируете, источник находится в беспорядочном состоянии, но логически он все еще следует по тем же путям. Не существует компилятора «волшебного» вуду. Я знаю, потому что недавно потерял репозиторий и использовал рефлектор для восстановления исходного кода. Обфускация - это боль, которую нужно «поддерживать», если она не является частью вашего процесса сборки. Это добавляет накладных расходов, но все ли мы пишем приложения с интенсивными вычислениями? Нет. Это слабый слой защиты для слабого нападающего.
Вы абсолютно правы, сохранение исходной карты - это ОГРОМНЫЕ накладные расходы. Я никогда не думал, что хранить файл где-то было такой болью: P
Кажется, все упустили феникс ntcore.com/phoenix.php, что неплохо
Я согласен с Китом. Если вы используете лицензионную защиту, просто напишите ее на C++ / CLI, чтобы было сложнее понять, как она работает.
Какой ужасный ответ. Вы действительно пробовали декомпилировать в последнее время? Декомпиляторы получили лучше, не хуже. Reflector дает качество, близкое к оригинальному, конечно, без комментариев.
@ BlueRaja-DannyPflughoeft, этот ответ относится к 2008 году, когда Reflector сильно отставал от C# 3.5 - 8 лет - это долгий срок для такого рода технологий. Тем не менее, я все еще не думаю, что обфускация того стоит по трем причинам: 1) вы можете отвлечь компетентную команду от большого проекта, и они могут написать его с нуля без доступа к исходному коду за половину времени. 2) вы привязываете новую команду к незнакомой большой базе кода (даже с комментариями), и им потребуется много времени, прежде чем они смогут с пользой улучшить ее, и 3) обратная инженерия всегда возможна, но всегда незаконна.
@Keith 1. Не каждый проект - это корпоративный проект с несколькими командами разработчиков, что за странно ограниченное мировоззрение. Даже если бы они были, переписывание большинства программ требует немного количества обратного проектирования (например, серверные протоколы, форматы файлов и т. д.). 2. Обратный инжиниринг является незаконным нет, по крайней мере, не в США. TOS - это не контракт, и его нарушение не является незаконным. Многие люди зарабатывают на жизнь обратным проектированием (Разработчики антивирусов, разработчики Mono, инженеры AMD и т. д.). См. здесь
@ BlueRaja-DannyPflughoeft ах, не то, что я имел в виду, но мне не хватало слов. Обратное проектирование вашего продукта, чтобы продавать его как конкурента, избегать оплаты за него или иным образом получить конкурентное преимущество, является незаконным. Обфускация на самом деле ничего не делает для защиты / скрытия серверных протоколов или форматов файлов - она действительно плохо скрывает алгоритмы или что-то еще вычислительное. Все, что это делает, - это затрудняет чтение кода вашей бизнес-логики. Возникает вопрос: защищает ли IP обфускация? Моего ответа недостаточно, чтобы окупить его.
@Keith Пожалуйста, вы имеете в виду, что подпись кода может полностью предотвратить декомпиляцию ?? !! Если да, могут ли это сделать самоподписывающиеся сертификаты?
@AhmedSuror нет. Подпись ключа означает просто сильное имя. Предположим, у вас есть одна DLL, которая проверяет лицензионный ключ - хакеры декомпилируют ее, перекомпилируют новую, минуя проверки, и заменяют ее. Если у вас есть сильные ссылки, они не могут этого сделать, им также придется перекомпилировать все, что вызывает это. Вы просто делаете для них больше работы. Самозаверяющие сертификаты по-прежнему будут иметь такой эффект, но потенциально могут оттолкнуть людей от использования вашего программного обеспечения, если они действительно доверяют вашему авторитету (хотя, возможно, это нормально внутри большой корпорации с внутренними цепочками сертификатов).
@Keith Как я понял, если, например, у меня была жестко закодированная строка подключения в DLL, а DLL подписана, строка подключения должна быть зашифрована и не читается даже после декомпиляции, я прав? И что подразумевается под If you have strong references ? заранее спасибо
@AhmedSuror Нет. Если у вас есть string в DLL, это может быть отражено всегда. У вас может быть односторонний хэш или открытая часть асимметричного ключа, но нет способа получить "жестко запрограммированная строка подключения", который нельзя извлечь. Сборки со строгими именами - это действительно их собственная тема, но в основном она блокирует замену одной сборки на другую с теми же именами классов / методов (что вы можете сделать в .NET в противном случае).
Я запутывал код в одном и том же приложении с .Net 1, и это было большой головной болью с точки зрения обслуживания. Как вы упомянули, проблемы сериализации можно избежать, но очень легко сделать ошибку и скрыть то, что вы не хотели запутывать. Легко сломать сборку или изменить шаблон обфускации и не иметь возможности открывать старые файлы. Кроме того, бывает сложно выяснить, что и где пошло не так.
Нашим выбором был Xenocode, и если бы я снова сделал этот выбор сегодня, я бы предпочел не запутывать код или использовать Dotfuscator.
Еще я использовал SmartAssembly. Я обнаружил, что Ezrinz .Net Reactor намного лучше подходит для меня в приложениях .net. Он запутывает, поддерживает Mono, объединяет сборки, а также имеет очень хороший модуль лицензирования для создания пробной версии или привязки лицензии к конкретной машине (очень легко реализовать). Цена также очень конкурентоспособная, и когда мне нужна была поддержка, они работали быстро. Эзириз
Чтобы было ясно, я просто клиент, которому нравится продукт, и никак не связан с компанией.
У меня есть несколько друзей, которые поддерживают .Net Reactor - хотя на веб-сайте продуктов есть полезная группа Google по продукту: groups.google.com/group/net-reactor-users?hl=en
+1 для Эзириза. У меня были отличные результаты. Это лучшее, что есть сейчас, ИМО.
.NET Reactor - отстой. Я сменил компьютер, дважды отправил электронное письмо с описанием файла лицензии и не получил ответа. Вы видите, что лицензия .NET Reactor заблокирована аппаратно.
Это нормально. Как вы ожидаете, что они вам поверят? Как они узнают, что вы действительно сменили компьютер и не пытаетесь запустить на компьютере лицензию друга? Для этого есть аппаратный замок! Если бы его можно было использовать на нескольких компьютерах, аппаратная блокировка была бы бесполезной.
(PS. Мы выбрали Reactor в основном на основании этого ответа SO.)
Я написал приложение для анализа проектов C# и обфускации на уровне исходного кода, а затем сборки проектов. У меня есть причина для этого: я должен построить его против WinForms, Web, Mono, Silverlight и WPF. И все они хорошо работают
Я использую Reactor довольно давно, и до сих пор не могу понять, как использовать их лицензионную систему !!
Вы должны использовать то, что является самым дешевым и наиболее известным для вашей платформы, и прекратить работу. Обфускация языков высокого уровня - сложная проблема, потому что потоки кода операции виртуальной машины не страдают от двух самых серьезных проблем, с которыми сталкиваются потоки кода операции: идентификация функции / метода и сглаживание регистров.
Что вы должны знать об обращении байт-кода, так это то, что для тестировщиков безопасности уже стандартной практикой является просмотр прямого кода X86 и поиск в нем уязвимостей. В необработанном X86 вы даже не можете найти допустимые функции, не говоря уже о том, чтобы отслеживать локальную переменную во время вызова функции. Практически ни при каких обстоятельствах реверсоры собственного кода не имеют доступа к именам функций и переменных - если только они не просматривают код Microsoft, для которого MSFT услужливо предоставляет эту информацию общественности.
"Dotfuscation" работает в основном путем скремблирования имен функций и переменных. Вероятно, это лучше, чем публиковать код с информацией уровня отладки, когда Reflector буквально отказывается от вашего исходного кода. Но все, что вы делаете сверх этого, скорее всего, приведет к уменьшению отдачи.
Недавно я попытался связать вывод одного бесплатного обфускатора с другим бесплатным обфускатором, а именно с Dotfuscator CE и новым обфускатором Babel на CodePlex. Подробнее в моем блоге.
Что касается сериализации, я переместил этот код в другую DLL и включил ее в проект. Я рассудил, что там не было никаких секретов, которых нет в XML, поэтому он не нуждался в обфускации. Если в этих классах есть какой-либо серьезный код, использование частичных классов в основной сборке должно покрыть его.
-1, потому что "yo dawg, я слышал, что вы любите обфускаторы, поэтому я запустил обфускатор на выходе обфускатора ... хотите знать больше? Дай мне страницы". Но я считаю второй абзац очень хорошим предложением.
У меня не было проблем со Smartassembly.
У нас есть многоуровневое приложение с интерфейсом asp.net и winform, которое также поддерживает удаленное взаимодействие. У меня не было проблем с использованием какого-либо обфускатора, за исключением типа шифрования, который генерирует загрузчик, который может быть проблематичным во всевозможных неожиданных отношениях и, на мой взгляд, просто не стоит того. На самом деле мой совет был бы больше похож на «Избегайте шифрования обфускаторов типа загрузчика, таких как чума». :)
По моему опыту, любой обфускатор будет отлично работать с любым аспектом .net, включая asp.net и удаленное взаимодействие, вам просто нужно познакомиться с настройками и узнать, как далеко вы можете продвинуть его в каких областях вашего кода. И найдите время, чтобы попытаться произвести обратный инжиниринг того, что вы получаете, и посмотреть, как это работает с различными настройками.
Мы использовали несколько в течение многих лет в наших коммерческих приложениях и остановились на обфускаторе Spices от 9rays.net, потому что цена подходящая, он выполняет свою работу и у них хорошая поддержка, хотя мы действительно не нуждались в поддержке годами, но, честно говоря Я не думаю, что действительно имеет значение, какой обфускатор вы используете, проблемы и кривая обучения одинаковы, если вы хотите, чтобы он работал правильно с удаленным взаимодействием и asp.net.
Как уже упоминали другие, все, что вы на самом деле делаете, - это эквивалент замка, удерживая в остальном честных людей и / или затрудняя простую перекомпиляцию приложения.
Лицензирование обычно является ключевой областью для большинства людей, и вам в любом случае определенно следует использовать какую-то систему сертификатов с цифровой подписью для лицензирования. Ваша самая большая потеря будет из-за случайного обмена лицензиями, если у вас нет умной системы, люди, которые нарушают систему лицензирования, никогда не собирались покупать.
Очень легко зайти слишком далеко и оказать негативное влияние на ваших клиентов и ваш бизнес, делать то, что просто и разумно, а затем не беспокоиться об этом.
Вы также можете изучить новые технологии защиты кода, такие как Метафорик и V.i.Labs, и новые технологии защиты программного обеспечения от копирования, такие как ByteShield. Раскрытие информации: я работаю в ByteShield.
Последние два дня я экспериментировал с расширенной версией Dotfuscator Community Edition (которую можно загрузить бесплатно после регистрации базовой версии CE, которая идет в комплекте с Visual Studio).
Я думаю, что причина того, что все больше людей не используют обфускацию по умолчанию, заключается в том, что это серьезная проблема по сравнению с риском. В небольших тестовых проектах мне удавалось запустить запутанный код с большими усилиями. Развертывание простого проекта через ClickOnce было хлопотным, но достижимым после подписания манифестов вручную с помощью mage. Единственная проблема заключалась в том, что при ошибке трассировка стека возвращалась запутанной, и CE не имеет упакованного деобфускатора или осветлителя.
Я попытался запутать реальный проект, основанный на VSTO в Excel, с интеграцией Virtual Earth, множеством вызовов веб-сервисов, контейнером IOC и множеством размышлений. Это было невозможно.
Если обфускация действительно является критическим требованием, вы должны проектировать свое приложение с учетом этого с самого начала, тестируя запутанные сборки по мере продвижения. В противном случае, если это довольно сложный проект, вы столкнетесь с серьезной болью.
Еще пользуюсь smartassembly. Однако я не знаю, как это работает для веб-приложения. Однако я хотел бы отметить, что если ваше приложение использует защиту условно-бесплатного типа, убедитесь, что оно не проверяет лицензию с логическим возвратом. это слишком легко взломать байтом. http://blogs.compdj.com/post/Binary-hack-a-NET-executable.aspx
Мы используем SmartAssembly в нашем клиенте Windows. Работает нормально.
Есть и дополнительные проблемы. Распечатка имен ваших классов в файлах журнала / исключениях должна быть деобфусцирована. И, конечно, не может создать класс по его имени. Поэтому рекомендуется взглянуть на своего клиента и посмотреть, какие проблемы можно решить, запутав его.
Я сейчас по колено в этом, пытаюсь найти хорошее решение. Вот пока мои впечатления.
Ксенокод - у меня есть старая лицензия на Xenocode2005, которую я использовал для обфускации моих сборок .net 2.0. Он отлично работал на XP и был достойным решением. Мой текущий проект - .net 3.5, и я использую Vista, служба поддержки посоветовала мне попробовать, но версия 2005 года даже не работает в Vista (вылетает), поэтому теперь я должен купить PostBuild2008 по невероятной цене. 1900 долларов. Это может быть хороший инструмент, но я не собираюсь выяснять. Слишком дорого.
Reactor.Net - это гораздо более привлекательная цена, и он отлично работал с моим автономным исполняемым файлом. Модуль лицензирования тоже был хорош и сэкономил бы мне кучу усилий. К сожалению, в нем отсутствует ключевая функция, а именно возможность исключать данные из обфускации. Это делает невозможным достижение нужного мне результата (объединение нескольких сборок вместе, обфускация одних, а не обфускация других).
SmartAssembly - Я скачал Eval для этого, и он работал безупречно. Я смог добиться всего, чего хотел, и интерфейс был первоклассным. Цена по-прежнему довольно высока.
Dotfuscator Pro - Не удалось найти цену на сайте. В настоящее время ведутся переговоры о получении цитаты. Звучит зловеще.
Конфузер - проект с открытым исходным кодом, который работает довольно хорошо (чтобы запутать людей, как следует из названия).
Примечание: ConfuserEx, как сообщается, "сломан" согласно Выпуск # 498 в их репозитории GitHub.
вы можете опубликовать, сколько дотфускаторов цитирует?
@Anthony Я недавно купил лицензию в начале 2011 года. Ценой был 2475 долларов США за минимум 1 машину для сборки + 1 лицензию разработчика. Включает 12 месяцев обновлений и поддержки.
@Yoshi спасибо, что дали мне знать, очень признателен
Я не использовал .NET Reactor, когда был написан этот пост, но теперь вы можете исключить части вашего кода из обфускации с помощью атрибута System.Reflection.Obfuscation. Есть также некоторые настройки, которые позволяют вам делать такие вещи, как исключение всех методов или всех сериализуемых типов.
DotFuscator процитировал мне 4999 долларов, которые были снижены до 4500 долларов из-за 10% скидки. Это было за 1 лицензию разработчика! В ходе обсуждений она была снижена до 2500 долларов, но все еще слишком дорого.
В .NET Reactor теперь есть редактор правил исключения, позволяющий исключить определенные классы, методы или свойства из обфускации. Кроме того, вы можете использовать флажок «Только слияние», чтобы исключить конкретную dll из обфускации.
Я использовал .Net Reactor много лет. Он работает нормально, но с этим инструментом есть некоторые проблемы. Во-первых, иногда, когда вы обновляете .Net Reactor до более новой версии, запутанный код может перестать работать должным образом. Со мной такое случалось несколько раз. В частности, вы защищаете ту же сборку более новой версией, но она генерирует неожиданные исключения во время выполнения. Во-вторых, у этих ребят одна из худших саппортов в мире. Я несколько раз просил поддержки, но они так и не ответили. Очень неприятно, особенно с учетом того, что лицензия компании стоит несколько сотен долларов.
Confuserex не нарушен. Он по-прежнему отлично справляется с переименованием и удалением метаданных.
Все зависит от языка программирования, который вы используете. Прочтите статью: Обфусцированный код
Вот документ от самой Microsoft. Надеюсь, что это поможет ... это с 2003 года, но все еще может быть актуальным.
бесплатный способ - использовать dotfuscator из визуальной студии, иначе вам придется пойти и купить обфускатор, такой как Postbuild (http://www.xenocode.com/Landing/Obfuscation.aspx)
Я не уверен, что понимаю этот голос против, почему бы не дать объяснение?
Короткий ответ: вы не можете.
Существуют различные инструменты, которые затруднят чтение вашего кода кому-либо, на некоторые из которых указывалось в других ответах.
Однако все это затрудняет чтение - они увеличивают количество требуемых усилий, вот и все. Часто этого бывает достаточно, чтобы отпугнуть случайных читателей, но тот, кто полон решимости покопаться в вашем коде, всегда сможет это сделать.
если (усилия. Требуется> codeFromScratch.Costs) DoNoReverseEngineer ();
@NicolasDorier, Operator '>' cannot be applied to operands of type 'System.TimeSpan' and 'decimal'
@Saeb уверен, что они могут, преобразование TimeSpan в деньги (десятичные числа) - это то, чем занимается большинство предприятий.
Вы можете использовать «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 не существует полностью эффективной стратегии обфускации - кто-то с достаточными навыками всегда сможет декомпилировать / изменить ваше приложение.
+1 за это. Я пробовал практически все бесплатные обфускаторы .NET, и Dotfuscator был единственным, который фактически запутывал значительную часть MSIL в моих приложениях ASP.NET.
@Saille, вы использовали для этого бесплатную версию Dotfuscator - Community Edition? Я только что разговаривал о продажах, и они говорят, что профессиональная версия стоит 2000 евро. :(
Dotfuscator бесполезен.
Пробовал демо-версию Eziriz .... понравилось. Но ни разу не принес софта.
как это может быть ответ сообщества вики?
Крипто-обфускатор решит все ваши проблемы и сценарии. Это :
fyi @logicnp написал Crypto.
Крипто больше не поддерживается.
Я пробовал несколько, "Crypto" казался очень агрессивным и полезным, но при запуске запутанной DLL в De4dot я получил исходный код ... Извините за испорченную вечеринку ....
SmartAssembly великолепен, я использовался в большинстве моих проектов
Мне пришлось использовать защиту от обфускации / ресурсов в моем последнем rpoject, и я обнаружил, что Крипто-обфускатор - хороший и простой в использовании инструмент. Проблема сериализации - это только вопрос настроек этого инструмента.
@logicnp, это ваш второй пост в этой теме, в котором одобряется этот продукт. Сообщите, если вы связаны с разработчиком этого продукта.
Извините, но de4dot может это деобфускировать. Я бы рекомендовал использовать ConfuserEx.
Избегайте реактора. Это совершенно бесполезно (и да, я заплатил за лицензию). Xenocode был лучшим из тех, с которыми я столкнулся, и для которого я тоже купил лицензию. Поддержка была очень хорошей, но она мне не нужна, просто работала. Я протестировал все обфускаторы, которые смог найти, и пришел к выводу, что xenocode, несомненно, был самым надежным и выполнял самую лучшую работу (а также возможность отправить процесс вашего .NET exe в собственный exe, который я больше нигде не видел).
Между реактором и ксенокодом есть два основных различия. Во-первых, Xenocode действительно работает. Во-вторых, скорость выполнения ваших сборок ничем не отличается. С реактором это было примерно в 6 миллионов раз медленнее. У меня также сложилось впечатление, что на реакторе работал один человек.
.NET Reactor имеет множество опций. Некоторые из них включают защиту во время выполнения и немного замедляют работу приложения, но это цена за дополнительную безопасность, которую вы получаете. Однако я серьезно сомневаюсь, что будет какое-то замедление, если вы просто будете использовать обфускацию .NET Reactor без каких-либо других опций.
Я обнаружил, что Agile.Net обеспечивает довольно хорошую защиту для вашей сборки .Net, поскольку предлагает не только обфускацию, но и шифрование. Скачать бесплатную трассу.
http://secureteam.net/NET-Code-Protection.aspxhttp://secureteam.net/downloads.aspx
Eazfuscator сказал, почему бы не зашифровать MSIL: см. gapotchenko.com/eazfuscator.net/kb/100028
Я пробовал продукт под названием Rummage, и он дает вам некоторый контроль ... Хотя в нем не хватает многих вещей, которые предлагает Eziriz, но цена на Rummage слишком высока ...
Есть хорошая версия с открытым исходным кодом под названием Obfuscar. Вроде нормально работает. Типы, свойства, поля, методы могут быть исключены. Оригинал здесь: https://code.google.com/p/obfuscar/, но так как вроде больше не обновляется
Я смотрел на это сегодня - отметьте дату моего комментария! - и это немного беспорядочно. Я также потерял большую часть часа, пытаясь заставить его повторно подписать сборку с помощью файла .pfx. Он выдал неразборчивую, недокументированную ошибку; кажется, вы можете подписаться только с помощью .snk.
Обфускация - это не настоящая защита.
Если у вас есть файл .NET Exe, существует решение Гораздо лучше.
Я использую Фемида и могу сказать, что он работает очень хорошо.
Единственным недостатком Themida является то, что она не может защитить .NET Dll. (Он также защищает код C++ в Exe и DLL)
Themida намного дешевле, чем упомянутые здесь обфускаторы, и является лучшим среди антипиратствозащита на рынке. Он создает виртуальную машину, на которой выполняются важные части вашего кода, и запускает несколько потоков, которые обнаруживают манипуляции или точки останова, установленные взломщиком. Он преобразует .NET Exe во что-то, что Reflector больше не распознает как сборку .NET.
Пожалуйста, прочтите подробное описание на их сайте: http://www.oreans.com/themida_features.php
Несколько дубликатов: google.com/…