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

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

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

EDIT:

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

Ответы [ 13 ]

101 голосов
/ 19 марта 2010

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

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

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

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

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

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

16 голосов
/ 19 марта 2010

На работе здесь мы используем Dotfuscator от PreEmptive Solutions.

Хотя невозможно защитить .NET сборки, 100% Dotfuscator делает это достаточно сложно, я думаю. Я пришел с множеством методов запутывания;

Перекрестное переименование
Схемы переименования
Переименование префикса
Индукция повышенной перегрузки
Инкрементное запутывание
Отчет по переименованию HTML
Поток управления
Строковое шифрование

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

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

Существует бесплатных альтернатив, конечно;

13 голосов
/ 19 марта 2010

Разместите свой сервис у любого поставщика облачных услуг.

10 голосов
/ 19 марта 2010

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

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

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

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

И IDA Pro в некоторой степени поддерживает .Net.

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

5 голосов
/ 19 марта 2010

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

4 голосов
/ 22 октября 2013

Никакой obsfuscator не может защитить ваше приложение, даже ни одно из описанных здесь.Посмотрите эту ссылку, это deobsfuscator, который может deobsfuscating почти каждый obsfuscator там.

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

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

3 голосов
/ 19 марта 2010

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

3 голосов
/ 19 марта 2010

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

2 голосов
/ 19 марта 2010

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

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

1 голос
/ 29 декабря 2015

Вы API?

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

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

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

...