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

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

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

EDIT:

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

12 ответов


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

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

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

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

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

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


здесь мы используем Dotfuscator из упреждающих решений.

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

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

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

(Нет, я не работаю для упреждающего ; -))

здесь freeware альтернативы конечно;


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


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

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

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

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

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

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


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


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

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

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


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


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


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

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


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

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


вы API?

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

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

конечно, это еще одна работа, но, в конце концов, вы контролируете.


Я знаю, что это старый, но, целесообразно самое предварительное анти -- треская программное обеспечение Я всегда использовал.
Но это не бесплатно.