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

StackOverflow https://stackoverflow.com/questions/1276237

Вопрос

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

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

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

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

Любые предложения по предотвращению этого приветствуются.

Это было полезно?

Решение

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

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

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

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

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

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

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

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

Другие советы

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

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

Но во-вторых

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

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

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

РЕДАКТИРОВАТЬ:В поисках инструментов деобфускации я наткнулся на инструмент с открытым исходным кодом. Де4Дот.Этот инструмент поддерживает декомпиляцию запутанных библиотек DLL, созданных большинством коммерческих инструментов, и тоже неплохо справляется со своей задачей.

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

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

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

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

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

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

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

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

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

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

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

надеюсь это поможет

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top