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

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

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

Править:

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

68
задан 3 revs, 2 users 100% 19 March 2010 в 15:48
поделиться

8 ответов

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

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

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

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

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

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

103
ответ дан 24 November 2019 в 14:09
поделиться

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

3
ответ дан 24 November 2019 в 14:09
поделиться

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

3
ответ дан 24 November 2019 в 14:09
поделиться

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

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

2
ответ дан 24 November 2019 в 14:09
поделиться

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

5
ответ дан 24 November 2019 в 14:09
поделиться

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

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

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

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

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

Конечно, есть бесплатные альтернативы;

16
ответ дан 24 November 2019 в 14:09
поделиться

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

13
ответ дан 24 November 2019 в 14:09
поделиться

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

Практически описывает всю ситуацию.

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

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

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

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

10
ответ дан 24 November 2019 в 14:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: