Как я могу защитить свои сборки .NET от декомпиляции?

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

Защита от декомпиляции по-прежнему остается сложной задачей. Я все еще ищу быстрый, простой и безопасный способ сделать это. Я не хочу обфускать свой код, поэтому мои имена методов будут a, b, c или так. Отражатель или другие инструменты не должны распознавать мое приложение как сборку .NET вообще. Я уже знаю о некоторых инструментах, но они очень дороги. Есть ли другой способ защитить мои приложения?

EDIT:

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

Ответ 1

Следует иметь в виду, что вы хотите сделать это таким образом, чтобы иметь смысл в бизнесе. Для этого вам нужно определить свои цели. Итак, каковы ваши цели?

Предотвращение пиратства? Эта цель не достижима. Даже нативный код может быть декомпилирован или взломан; Множество Warez, доступных в Интернете (даже для таких продуктов, как Windows и Photoshop), является доказательством того, что решительный хакер всегда может получить доступ.

Если вы не можете предотвратить пиратство, то как насчет просто уменьшить его? Это тоже ошибочно. Только один человек взломает ваш код, чтобы он был доступен для всех. Тебе нужно везти каждый раз. Пиратам повезло только один раз.

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

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

Лучшая стратегия состоит в том, чтобы предположить, что ваш продукт будет пиратским, и подумать о том, как воспользоваться ситуацией. Еще пара ссылок по теме:
Как я могу предотвратить кражу моего кода?
Защита приложения .NET

Ответ 2

Здесь мы используем Dotfuscator из PreEmptive Solutions.

Хотя невозможно защитить сборки .NET, 100% Dotfuscator делает это достаточно сложно, я думаю. У меня много методов обфускации;

Переименование перекрестных сборок
Переименование схем
Переименование префикса
Расширенная индукция перегрузки
Инкрементальная обфускация
Отчет о переименовании HTML
Контроль потока
Шифрование строк

И оказалось, что они не очень дороги для небольших компаний. У них есть специальная цена для небольших компаний.

(Нет, я не работаю для PreEmptive;-))

Есть бесплатные альтернативы,

Ответ 3

Предоставьте свою услугу любому провайдеру облачных сервисов.

Ответ 4

Как предотвратить декомпиляцию любого приложения С#

В значительной степени описывает всю ситуацию.

В какой-то момент код должен быть переведен в байт-код VM, и тогда пользователь может получить его.

Машинный код не так уж и отличается. Хороший интерактивный дизассемблер/отладчик, такой как IDA Pro, делает практически любое собственное приложение прозрачным. Отладчик достаточно умен, чтобы использовать ИИ для определения общих API-интерфейсов, оптимизаций компилятора и т.д., Что позволяет пользователю выполнять надстройку конструкций более высокого уровня из сборки, созданной машинным кодом.

И в некоторых случаях IDA Pro поддерживает .Net.

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

Ответ 5

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

Ответ 6

Никакое обфускатор не может защитить ваше приложение, даже не описанное здесь. См. Эту ссылку, это деобфенсатор, который может дефискурить почти каждый обфускатор там.

https://github.com/0xd4d/de4dot

Лучший способ помочь вам (но помните, что они также не являются полноценными проф) - это использовать смешанные коды, кодировать ваши важные коды на неуправляемом языке и создавать DLL как на C или С++, а затем защищать их либо с помощью Armageddon или Themida. Themida не для каждого взломщика, это один из лучших защитников на рынке, он также может защитить ваше программное обеспечение .NET.

Ответ 8

Мы используем {SmartAssembly} для защиты .NET распределенного приложения уровня предприятия, и он отлично поработал для нас.

Ответ 9

Если вы хотите полностью защитить свое приложение от декомпиляции, посмотрите на Aladdin Hasp. Вы можете объединить свои сборки в зашифрованную оболочку, доступ к которой может получить только ваше приложение. Конечно, возникает вопрос, как они могут это сделать, но это работает. Я не знаю, однако, если они защищают ваше приложение от времени исполнения/отражения, которое может сделать Crack.NET.

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

Ответ 10

У вас API?

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

Я так думаю, что вы на 100% уверены, что ваш код не декомпилирован, и вы устанавливаете свои собственные ограничения в своем API, чтобы разработчики/хакеры не потребляли ваш API так, как вы этого не хотите.

Конечно, это еще одна работа, но, в конце концов, вы находитесь под контролем.

Ответ 11

Если кто-то должен украсть ваш код, это, вероятно, означает, что ваша бизнес-модель не работает. Что я имею в виду? Например, я покупаю ваш продукт, а затем прошу поддержки. Вы слишком заняты или полагаете, что мой запрос недействителен и пустая трата времени. Я расшифровываю ваш продукт, чтобы поддерживать мой относительный бизнес. Ваш продукт становится более ценным для меня, и я уделяю приоритетное внимание своему времени, чтобы решить бизнес-модель для использования вашего продукта. Я перекодирую и повторно бренду вашего продукта, а затем выхожу и делаю деньги, которые вы решили оставить на столе. Есть причины для защиты кода, но, скорее всего, вы смотрите на проблему с неправильной точки зрения. Конечно же. Ты "кодер", и я деловой человек.;-) Приветствия!

пс. Я также разработчик. то есть "кодер"

Ответ 12

Я знаю, что это старая версия, но Themida - самая передовая программа для защиты от взлома, которую я когда-либо использовал.
Это не бесплатно, хотя.

Ответ 13

Помимо перечисленных здесь продуктов сторонних производителей, есть еще один: NetLib Encryptionizer. Однако это работает не так, как обфускаторы. Обфускаторы модифицируют саму сборку с помощью встроенного в нее "двигателя" деобфускации. Encryptionizer шифрует библиотеки DLL (управляемые или неуправляемые) на уровне файлов. Таким образом, он не изменяет DLL, кроме как для ее шифрования. "Движок" в данном случае - это драйвер режима ядра, который находится между вашим приложением и операционной системой. (Отказ от ответственности: я из NetLib Security)