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

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

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

мы слышали о рефлекторе и другом декомпиляторы, что делает наш код очень уязвимым для копирования.

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

любое предложение предотвратить это приветствуется.

12 ответов


Если вы развертываете .NET-сборки на клиентских компьютерах, всегда будет возможна какая-то декомпиляция с помощью reflector и подобных инструментов.

однако эта ситуация существенно не отличается от того, с чем вы столкнулись бы, если бы написали приложение на родном C++. Всегда можно декомпилировать вещи - если бы это было невозможно, процессор тоже не мог бы этого понять.

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

вопрос вращается вокруг того, как трудно победить вашу практику лицензирования и возврат инвестиций.

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

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

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

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


Если бы это был я, я бы не пытался запутать; я бы:

  1. не беспокойтесь об этом и стремиться постоянно улучшать и оставаться впереди

во-вторых

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

Google для .NET обфускатор. Вы найдете много продуктов, которые помогут в этом. Также есть связанные вопросы, уже заданные в Stack Overflow.

вот некоторые:

редактировать: при поиске инструментов де-обфускации я наткнулся на инструмент с открытым исходным кодом De4Dot. Этот инструмент поддерживает декомпиляцию obfucated DLL, созданных большинство коммерческих инструментов и делает довольно хорошую работу.


в последний раз, когда я смотрел на это,Spices.Net Обфускатор!--2--> выглядел лучшим на рынке.

Нет, я на них не работаю. :)


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


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


обфускаторы, упомянутые другими, вероятно, очень хороши.

альтернативный подход, который вы, возможно, не рассматривали, - это кодирование некоторой основной бизнес-логики с использованием языка, полностью скомпилированного в машинный код, например C++.

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

например, ваш медицинский программный пакет может выполнять обнаружение края, скажем, определенных желез с целью сообщить врачу размер указанной железы. Алгоритм вычисления размера железы из растрового изображения будет содержаться в DLL, написанной на C++.


чтобы ответить на ваш вопрос о оболочке C++ вокруг кода .net; я не думаю, что это сработает, потому что при развертывании приложения окончательная dll C++ и DLL .net, содержащая код бизнес-логики, будут отдельными сущностями, и те, кто хочет добраться до вашей бизнес-логики, все равно смогут просто выбрать dll .net и заглянуть внутрь.


возможно, вы захотите рассмотреть Remotesoft Salamander Protector это намного лучше, чем что-либо еще, поскольку это делает невозможным декомпилирование на язык высокого уровня.

конечно, любой, кто является экспертом, может провести достаточно времени с вашим программным обеспечением и выяснить это,потому что он декомпилирует некоторые, но он скрывает весь набор и получает методы

Итак, они могут получить пик, но это все. они должны выяснить остальные, которые понижают вероятность того, что кто-то просто взломает его.

надеюсь, что это помогает


запись в этой теме после долгого времени. Мы приобрели программное обеспечение под названием Intellilock что полезно в предотвращении декомпиляции, обфускации, а также имеет сильный модуль лицензирования.

мы не пошли на .Net Reactor несмотря на то, что он имеет больше контроля профилактики, как Intellilock служил нашей цели достаточно хорошо.


Obfuscator путает код, но protector защищает. Вы можете использовать .Net protector:NetWinProtector


Intellilock хорошо послужил нашей цели с точки зрения запутывания, а также лицензирования. Но я бы не рекомендовал продукт, так как поддержка не до отметки. Мы никогда не получали ответов вовремя для Проблемы, с которой мы столкнулись. Мы должны были искать и исследовать самостоятельно или даже изменить бизнес-требование для достижения некоторых целей.

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