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

В моем продукте есть несколько компонентов: ASP.NET, приложение Windows Forms и служба Windows. Примерно 95% кода написано на VB.NET.

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

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

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

Несколько дубликатов: google.com/…

John Rasch 17.07.2009 01:37

См .: msdn.microsoft.com/en-us/vcsharp/aa336818.aspx#obfuscators

Michał Ziober 17.07.2009 01:39

См. Обфускатор Agile.net .NET для альтернативного решения для обфускации вашего кода. В частности, проверьте его функцию виртуализации кода.

sutton bernard 05.01.2016 16:44

См. Хороший список обфускаторов от ArmDot до Xenocode здесь, на SO: stackoverflow.com/a/60054/1480104

Artem Razin 16.05.2019 18:20
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
162
4
142 314
30
Перейти к ответу Данный вопрос помечен как решенный

Ответы 30

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

Smartassembly совершенно бесполезен. Взломщик помещает ваше приложение в DumbAssembly, и вся "защита" удаляется щелчком мыши: woodmann.com/collaborative/tools/index.php/Dumbassembly

Elmue 06.03.2014 07:37

На данный момент безопасный просмотр в Google помечает сайт woodmann как небезопасный. Кроме того, на сайте Вудмана есть целая статья о том, что он ранее страдал от заражения вредоносным ПО, поэтому я действительно не хочу перемещаться по его сайту, когда Google ему не доверяет.

Brian 10.05.2016 23:19

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


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

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

Smartassembly совершенно бесполезен. Взломщик помещает ваше приложение в DumbAssembly, и вся "защита" удаляется щелчком мыши: woodmann.com/collaborative/tools/index.php/Dumbassembly

Elmue 06.03.2014 07:38

На данный момент безопасный просмотр в Google помечает сайт woodmann как небезопасный. Кроме того, на сайте Вудмана есть целая статья о том, что он ранее страдал от заражения вредоносным ПО, поэтому я действительно не хочу перемещаться по его сайту, когда Google ему не доверяет.

Brian 10.05.2016 23:19

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

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

Честно говоря, я убежден, что обфускация - это большой хакер.

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

Большинство инструментов обфускации имеют возможность исключать классы или методы и т.д ... на самом деле Dotfuscator вводил функцию, которая, если бы обнаружила определенные использования классов, она автоматически исключила бы ее для вас.

JoshBerke 13.11.2008 16:53

Сам Dotfuscator - это клиент-серверное приложение, использующее веб-службы (если вы включили их функции SoS), а Dotfuscator действительно использует себя для обфускации себя. Так что это не должно быть проблемой

JoshBerke 13.11.2008 16:56

Браво, Иуда! Единственный способ оставаться впереди - разрабатывать новый, лучший код, а не цепляться за уже написанный вами код. В конечном итоге вы вкладываете время, силы и, возможно, даже деньги во что-то, что не имеет отношения к делу. Обфускация не стоит.

David Rutten 04.09.2009 07:29

Вот почему мне не нравится эта система репутации, у вас 19 голосов, и вы не ответили. Пользователь не спрашивает ваше мнение об обфускации, он хочет узнать больше о методах обфускации.

backslash17 21.09.2009 02:00

Я предоставил информацию о своем опыте использования нескольких существующих обфускаторов. И мое мнение основано на этом опыте.

Judah Gabriel Himango 21.09.2009 04:07

+1 за «Честно говоря, я убежден, что обфускация - это большой хакер». Вы не могли бы выразить это лучше, чем это.

Andrei Rînea 22.10.2010 03:09

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

Brady Moritz 07.09.2011 23:38

Хотя я получаю обратную косую черту 17, как человек, исследующий тему, я всегда нахожу это полезным для обсуждения профессионалами того, нужна ли тема или нет. Иногда для меня наиболее полезными являются такие обсуждения.

SinisterRainbow 07.10.2013 00:16

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

user1841243 05.05.2014 21:09

@ user1841243 Но этого не происходит. Это как бугай: о нет, эти неизвестные люди где-то там могут просто взглянуть на скомпилированный IL и выплюнуть сгенерированный машиной C# без комментариев! Но подумайте об этом - зачем им это? Создать конкурирующий продукт? Этого не бывает; это открывает компанию для судебного иска. Вещи, связанные с безопасностью? Вот когда вы используете шифрование.

Judah Gabriel Himango 13.05.2014 20:10

В этом нет ничего параноидального. Люди могут загрузить инструмент и увидеть большую часть вашего точного исходного кода. Для меня это не имеет абсолютно ничего общего с тем, что люди декомпилируют, а затем повторно компилируют в качестве нового приложения, это связано с тем, что фрагменты моего исходного кода используются без моего разрешения. Очевидно, каждое приложение должно быть только с открытым исходным кодом? Если вы не защищаете свой исходный код, то в конечном итоге он становится именно таким. У меня большой опыт в этом, и, глядя на мой собственный код, большая часть декомпилированного кода точно такая же, как я его написал. Там даже мои комментарии.

GregInWI2 24.05.2016 14:52

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

Todd 07.12.2018 03:06

Infiniminer, источник вдохновения для Minecraft, был оставлен после того, как разработчик выпустил «необфусцированную сборку .NET», что привело к тому, что сообщество сделало несколько клонов, каждый со своими собственными решениями по балансировке (очевидно, сам Minecraft был написан на Java, поэтому он не действительно посчитать). Суть в том, что это не бугай, такое бывает, и есть по крайней мере один известный пример.

matt_rule 08.12.2020 15:41
Ответ принят как подходящий

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

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

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

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

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

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

Shrike 10.07.2009 18:54

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

Keith 10.07.2009 19:10

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

Razor 16.10.2013 10:02

@VincePanuccio Вы упускаете мою мысль: средний разработчик не сможет декомпилировать какой-либо проект .Net> = версии 2 и получить что-то компилируемое благодаря всей «магии» компилятора в более поздних версиях. Обфускация - это проблема, которую нужно поддерживать, и она добавляет огромные накладные расходы на исследование каждой ошибки / трассировки стека, но она не останавливает никого, решительно настроенных и даже не замедляет случайного копирования-пастера, использующего один или два метода. Это дорогой и слабый слой защиты, который того не стоит.

Keith 16.10.2013 11:41

Когда вы декомпилируете, источник находится в беспорядочном состоянии, но логически он все еще следует по тем же путям. Не существует компилятора «волшебного» вуду. Я знаю, потому что недавно потерял репозиторий и использовал рефлектор для восстановления исходного кода. Обфускация - это боль, которую нужно «поддерживать», если она не является частью вашего процесса сборки. Это добавляет накладных расходов, но все ли мы пишем приложения с интенсивными вычислениями? Нет. Это слабый слой защиты для слабого нападающего.

Razor 20.10.2013 13:32

Вы абсолютно правы, сохранение исходной карты - это ОГРОМНЫЕ накладные расходы. Я никогда не думал, что хранить файл где-то было такой болью: P

Razor 23.10.2013 04:32

Кажется, все упустили феникс ntcore.com/phoenix.php, что неплохо

Joe 20.12.2013 22:18

Я согласен с Китом. Если вы используете лицензионную защиту, просто напишите ее на C++ / CLI, чтобы было сложнее понять, как она работает.

Remi THOMAS 10.01.2014 12:38

Какой ужасный ответ. Вы действительно пробовали декомпилировать в последнее время? Декомпиляторы получили лучше, не хуже. Reflector дает качество, близкое к оригинальному, конечно, без комментариев.

BlueRaja - Danny Pflughoeft 21.06.2016 07:53

@ BlueRaja-DannyPflughoeft, этот ответ относится к 2008 году, когда Reflector сильно отставал от C# 3.5 - 8 лет - это долгий срок для такого рода технологий. Тем не менее, я все еще не думаю, что обфускация того стоит по трем причинам: 1) вы можете отвлечь компетентную команду от большого проекта, и они могут написать его с нуля без доступа к исходному коду за половину времени. 2) вы привязываете новую команду к незнакомой большой базе кода (даже с комментариями), и им потребуется много времени, прежде чем они смогут с пользой улучшить ее, и 3) обратная инженерия всегда возможна, но всегда незаконна.

Keith 21.06.2016 10:05

@Keith 1. Не каждый проект - это корпоративный проект с несколькими командами разработчиков, что за странно ограниченное мировоззрение. Даже если бы они были, переписывание большинства программ требует немного количества обратного проектирования (например, серверные протоколы, форматы файлов и т. д.). 2. Обратный инжиниринг является незаконным нет, по крайней мере, не в США. TOS - это не контракт, и его нарушение не является незаконным. Многие люди зарабатывают на жизнь обратным проектированием (Разработчики антивирусов, разработчики Mono, инженеры AMD и т. д.). См. здесь

BlueRaja - Danny Pflughoeft 21.06.2016 18:33

@ BlueRaja-DannyPflughoeft ах, не то, что я имел в виду, но мне не хватало слов. Обратное проектирование вашего продукта, чтобы продавать его как конкурента, избегать оплаты за него или иным образом получить конкурентное преимущество, является незаконным. Обфускация на самом деле ничего не делает для защиты / скрытия серверных протоколов или форматов файлов - она ​​действительно плохо скрывает алгоритмы или что-то еще вычислительное. Все, что это делает, - это затрудняет чтение кода вашей бизнес-логики. Возникает вопрос: защищает ли IP обфускация? Моего ответа недостаточно, чтобы окупить его.

Keith 21.06.2016 18:45

@Keith Пожалуйста, вы имеете в виду, что подпись кода может полностью предотвратить декомпиляцию ?? !! Если да, могут ли это сделать самоподписывающиеся сертификаты?

Ahmed Suror 19.11.2020 01:47

@AhmedSuror нет. Подпись ключа означает просто сильное имя. Предположим, у вас есть одна DLL, которая проверяет лицензионный ключ - хакеры декомпилируют ее, перекомпилируют новую, минуя проверки, и заменяют ее. Если у вас есть сильные ссылки, они не могут этого сделать, им также придется перекомпилировать все, что вызывает это. Вы просто делаете для них больше работы. Самозаверяющие сертификаты по-прежнему будут иметь такой эффект, но потенциально могут оттолкнуть людей от использования вашего программного обеспечения, если они действительно доверяют вашему авторитету (хотя, возможно, это нормально внутри большой корпорации с внутренними цепочками сертификатов).

Keith 19.11.2020 19:27

@Keith Как я понял, если, например, у меня была жестко закодированная строка подключения в DLL, а DLL подписана, строка подключения должна быть зашифрована и не читается даже после декомпиляции, я прав? И что подразумевается под If you have strong references ? заранее спасибо

Ahmed Suror 22.11.2020 20:30

@AhmedSuror Нет. Если у вас есть string в DLL, это может быть отражено всегда. У вас может быть односторонний хэш или открытая часть асимметричного ключа, но нет способа получить "жестко запрограммированная строка подключения", который нельзя извлечь. Сборки со строгими именами - это действительно их собственная тема, но в основном она блокирует замену одной сборки на другую с теми же именами классов / методов (что вы можете сделать в .NET в противном случае).

Keith 23.11.2020 10:47

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

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

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

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

У меня есть несколько друзей, которые поддерживают .Net Reactor - хотя на веб-сайте продуктов есть полезная группа Google по продукту: groups.google.com/group/net-reactor-users?hl=en

Bittercoder 08.10.2008 14:14

+1 для Эзириза. У меня были отличные результаты. Это лучшее, что есть сейчас, ИМО.

Druid 21.09.2009 07:55

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

OrElse 05.05.2011 21:23

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

Elmue 06.03.2014 07:43

(PS. Мы выбрали Reactor в основном на основании этого ответа SO.)

Chris 25.04.2014 11:29

Я написал приложение для анализа проектов C# и обфускации на уровне исходного кода, а затем сборки проектов. У меня есть причина для этого: я должен построить его против WinForms, Web, Mono, Silverlight и WPF. И все они хорошо работают

user3719030 23.01.2015 09:51

Я использую Reactor довольно давно, и до сих пор не могу понять, как использовать их лицензионную систему !!

Ahmed Suror 19.11.2020 01:53

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

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

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

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

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

-1, потому что "yo dawg, я слышал, что вы любите обфускаторы, поэтому я запустил обфускатор на выходе обфускатора ... хотите знать больше? Дай мне страницы". Но я считаю второй абзац очень хорошим предложением.

ANeves thinks SE is evil 17.06.2014 21:28

У меня не было проблем со 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 Johnston 21.10.2010 02:02

@Anthony Я недавно купил лицензию в начале 2011 года. Ценой был 2475 долларов США за минимум 1 машину для сборки + 1 лицензию разработчика. Включает 12 месяцев обновлений и поддержки.

Yoshi 14.04.2011 03:16

@Yoshi спасибо, что дали мне знать, очень признателен

Anthony Johnston 14.04.2011 12:26

Я не использовал .NET Reactor, когда был написан этот пост, но теперь вы можете исключить части вашего кода из обфускации с помощью атрибута System.Reflection.Obfuscation. Есть также некоторые настройки, которые позволяют вам делать такие вещи, как исключение всех методов или всех сериализуемых типов.

benteight 05.05.2011 20:53

DotFuscator процитировал мне 4999 долларов, которые были снижены до 4500 долларов из-за 10% скидки. Это было за 1 лицензию разработчика! В ходе обсуждений она была снижена до 2500 долларов, но все еще слишком дорого.

Oliver 29.11.2012 09:23

В .NET Reactor теперь есть редактор правил исключения, позволяющий исключить определенные классы, методы или свойства из обфускации. Кроме того, вы можете использовать флажок «Только слияние», чтобы исключить конкретную dll из обфускации.

avitenberg 04.04.2016 19:14

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

Sergey 26.10.2016 14:58

Confuserex не нарушен. Он по-прежнему отлично справляется с переименованием и удалением метаданных.

rolls 19.03.2017 07:37

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

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

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

Я не уверен, что понимаю этот голос против, почему бы не дать объяснение?

Russ Bradberry 17.07.2009 01:45

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

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

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

если (усилия. Требуется> codeFromScratch.Costs) DoNoReverseEngineer ();

Nicolas Dorier 30.10.2009 14:10

@NicolasDorier, Operator '>' cannot be applied to operands of type 'System.TimeSpan' and 'decimal'

Saeb Amini 21.11.2012 21:23

@Saeb уверен, что они могут, преобразование TimeSpan в деньги (десятичные числа) - это то, чем занимается большинство предприятий.

hultqvist 08.09.2014 12:15

Вы можете использовать «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 19.01.2010 06:36

@Saille, вы использовали для этого бесплатную версию Dotfuscator - Community Edition? Я только что разговаривал о продажах, и они говорят, что профессиональная версия стоит 2000 евро. :(

Houman 03.08.2011 14:11

Dotfuscator бесполезен.

user626528 12.01.2014 09:21

Пробовал демо-версию Eziriz .... понравилось. Но ни разу не принес софта.

как это может быть ответ сообщества вики?

ΦXocę 웃 Пepeúpa ツ 07.02.2019 15:49

Крипто-обфускатор решит все ваши проблемы и сценарии. Это :

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

fyi @logicnp написал Crypto.

CAD bloke 30.09.2016 08:26

Крипто больше не поддерживается.

Carl 25.11.2016 15:13

Я пробовал несколько, "Crypto" казался очень агрессивным и полезным, но при запуске запутанной DLL в De4dot я получил исходный код ... Извините за испорченную вечеринку ....

Dave Gahan 05.02.2018 09:39

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

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

@logicnp, это ваш второй пост в этой теме, в котором одобряется этот продукт. Сообщите, если вы связаны с разработчиком этого продукта.

H2ONaCl 30.01.2015 08:53

Извините, но de4dot может это деобфускировать. Я бы рекомендовал использовать ConfuserEx.

newbieguy 26.08.2015 15:40

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

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

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

avitenberg 04.04.2016 19:17

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

Eazfuscator сказал, почему бы не зашифровать MSIL: см. gapotchenko.com/eazfuscator.net/kb/100028

QMaster 04.01.2015 02:28

Я пробовал продукт под названием Rummage, и он дает вам некоторый контроль ... Хотя в нем не хватает многих вещей, которые предлагает Eziriz, но цена на Rummage слишком высока ...

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

Я смотрел на это сегодня - отметьте дату моего комментария! - и это немного беспорядочно. Я также потерял большую часть часа, пытаясь заставить его повторно подписать сборку с помощью файла .pfx. Он выдал неразборчивую, недокументированную ошибку; кажется, вы можете подписаться только с помощью .snk.

SteveCinq 08.07.2018 00:55

Обфускация - это не настоящая защита.

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

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

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

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

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

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