Что вы используете для защиты своего кода .NET от обратного проектирования?

Некоторое время мы использовали инструмент CodeVeil. Мне просто интересно, есть ли там лучшие альтернативы.

Изменить: Прежде чем больше людей неправильно поймут вопрос, я знаю, что определенный взломщик, вероятно, сможет победить любой из этих инструментов. Я не слишком беспокоюсь о них. Эти инструменты предназначены только для того, чтобы остановить "случайный взломщик" и остановить людей от кражи нашей компании. Если они достаточно хороши, чтобы пройти достойный инструмент, они, вероятно, не заинтересованы в краже нашего дерьмового кода: -P

Ответы

Ответ 1

У меня был большой успех с Xenocode Postbuild. Инструмент может обфускать сборки .NET, защищать агаст Разбор рефлектора, объединять сборки .NET в один исполняемый файл ( "виртуализация" ) и даже компилировать .NET-приложения в автономные исполняемые файлы, для которых не требуется установленная среда .NET.

Ответ 2

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

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

Ответ 3

Компилирование результатов вашего .NET-приложения в выходные сборки, содержащие много метаинформации. Эта информация позволяет очень легко восстановить что-то очень близкое к исходному коду. Отличный бесплатный инструмент под названием .NET Reflector можно использовать для этого и является популярным способом изучения работы библиотек базового класса. Загрузите и используйте этот инструмент для просмотра восстановленных версий содержимого сборки С#/VB.NET.

Если вы являетесь коммерческой организацией, то вы не хотите, чтобы люди находили, что вам легко смотреть на ваш дорогой код. Популярным методом является использование Obfuscation для скремблирования содержимого таким образом, чтобы он не изменял, как он работает, но затрудняет его понимание. Обфускация использует такие методы, как переименование переменных и методов. Разработка цели методов "a1", "a2", "a3" намного сложнее исходных "GetName", "UpdateInterestRate" и "SetNewPassword".

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

Ответ 4

Честно говоря, вы не можете много сделать, кроме некоторой запутывания с помощью таких инструментов, как вы упомянули..NET - это всего лишь шаг выше языков сценариев, за исключением того, что команды script являются двоичными и называются IL. Это немного упрощение, но это не слишком далеко от действительности. Любая хорошая программа, написанная с использованием Reflection, может использоваться для обратного проектирования приложений .NET или, если у вас достаточно знаний, хороший редактор шестнадцатеричных.

Ответ 5

Существует несколько популярных инструментов для обфускации, включая Dotfuscation, которая имеет "легкую" версию, поставляемую с Visual Studio 2005 и 2008. У них есть версия Pro, которая не только переименовывает имена переменных и функций. Тем не менее, код по-прежнему доступен для просмотра, он просто немного скремблируется, что затрудняет чтение и поиск логического потока программного обеспечения.

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

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

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

Ответ 6

Извините, что воскресил старый пост, но я думаю, что Eziriz.NET Reactor работает блестяще.

Фактически я использую его сам для всех своих приложений .net и, видимо, нет никакого существующего инструмента, который может декомпилировать программу, защищенную реактором .net. Более подробную информацию можно найти на информационной странице, http://www.eziriz.com/dotnet_reactor.htm. Проверьте его с пробной версией и .net-отражателем, и вы сами можете убедиться.

Ответ 7

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: я не работаю для RedGate создателей SmartAssembly. Я просто очень счастливый клиент, который нашел хорошее, доступное решение.

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

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

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

Ответ 8

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

Ответ 9

Я слышал, что Obfusticator хорош; он используется в .Net Reflector.