Как предотвратить декомпиляцию любого приложения на C#
Мы планируем разработать клиент-серверное приложение с использованием C# и MySQL. Мы планируем продавать продукт на полке, как и любую другую программную утилиту. Мы обеспокоены декомпиляцией нашего продукта, который имеет некоторое преимущество перед конкурентами с точки зрения удобства использования и функциональности в комплекте.
Как мы можем предотвратить декомпиляцию нашего программного обеспечения, чтобы бизнес-логика продукта осталась неизменной?
Мы слышали о Reflector и других декомпиляторах, что делает наш код очень уязвимым для копирования.
Наша клиентская база - не Корпорации, а практикующие врачи, которые сами могут этого не делать, но наши конкуренты могут захотеть скопировать / отключить лицензирование или даже копировать код / функциональность, чтобы ценность нашего продукта снижалась на рынке.
Любое предложение предотвратить это приветствуется.
12 ответов
Если вы развертываете сборки.NET на своих клиентских компьютерах, декомпиляция всегда будет возможна с использованием отражателя и подобных инструментов.
Однако эта ситуация существенно не отличается от того, с чем вы столкнулись бы, если бы написали приложение на нативном C++. Всегда можно декомпилировать вещи - если бы это было невозможно, процессор тоже не мог бы этого понять.
Вы никогда не победите опытного взломщика - они будут рассматривать вашу безопасность как интеллектуальную загадку, которую нужно решить для одной задачи.
Вопрос заключается в том, насколько трудно победить вашу практику лицензирования и возврат инвестиций.
Сядьте с таблицей и просмотрите возможные сценарии - опасность, вероятно, меньше, чем вы думаете.
Факторы, такие как "простота использования", видны в вашем программном обеспечении, чтобы их мог наблюдать любой пользователь - так что вы можете легко их скопировать. Но хороший пользовательский опыт редок (и редко копируется), потому что большинство разработчиков (включая меня) совсем не похожи на обычных пользователей.
Я бы посоветовал вам сконцентрироваться на том, чтобы усложнить работу взломщика, потому что вы никогда не сделаете это невозможным, просто некоммерческим.
Одна возможность попробовать: можно предварительно скомпилировать сборки в собственный код как часть процесса установки. Paint.NET делает это по соображениям производительности. Я полагаю, что после того, как вы это сделаете, вы можете отказаться от оригинальных сборок и использовать оптимизированные версии собственного кода.
Если бы это был я, я бы не пытался запутать; Я мог бы:
- Не волнуйтесь об этом и стремитесь постоянно улучшаться и оставаться впереди
Но во вторых
- Подумайте о предоставлении "секретных" услуг через Интернет. Вам решать, насколько это критично и возможно; но это "предотвращает" декомпиляцию, потому что у конечного пользователя даже нет кода.
Google для.NET Obfuscator. Вы найдете много продуктов, которые помогут в этом. Также есть связанные вопросы, уже задаваемые в переполнении стека.
Вот некоторые:
РЕДАКТИРОВАТЬ: При поиске инструментов для удаления запутывания, я наткнулся на инструмент с открытым исходным кодом De4Dot. Этот инструмент поддерживает декомпиляцию скрытых библиотек, созданных большинством коммерческих инструментов, и также выполняет довольно хорошую работу.
Intellilock хорошо послужил нашей цели с точки зрения запутывания, а также лицензирования. Но я бы не рекомендовал продукт, так как поддержка не на должном уровне. Мы не получили вовремя ответов на проблему, с которой столкнулись. Нам пришлось искать и исследовать самостоятельно или даже изменить бизнес-требования для достижения некоторых целей.
Посредством этого ответа я не собираюсь продвигать или рекламировать какое-либо программное обеспечение, а просто хочу, чтобы люди знали о продукте, который мы используем, чтобы они могли принять мудрое решение.
Обфускаторы, о которых упоминали другие, вероятно, очень хороши.
Альтернативный подход, который вы, возможно, не рассматривали, - это кодирование некоторой основной бизнес-логики с использованием языка, полностью скомпилированного для машинного кода, например C++.
Преимущество этого состоит в том, что кому-то намного сложнее декомпилировать ваш код. Недостатком этого является то, что у вас есть код на двух языках для поддержки. Это может быть не лучшим подходом для вашей ситуации, но полезно в тех случаях, когда необходимо запутать только небольшую часть кода, в то время как оставшаяся часть кода - пух UI.
Например, ваш медицинский программный пакет может выполнять обнаружение края, скажем, определенных желез с целью сообщить врачу размер этой железы. Алгоритм вычисления размера железы по растровому изображению будет содержаться в DLL, написанной на C++.
В последний раз, когда я смотрел на это, Spices.Net Obfuscator выглядел как лучшая вещь на рынке.
Нет, я не работаю на них.:)
Вот похожий вопрос об Обфускаторах. Может быть, это дает вам хорошую информацию.
Я использую http://www.smartassembly.com/. Он прост в использовании, а также имеет возможность отправлять отчеты о сбоях обратно, как вы встроили.
Ответить на ваш вопрос о оболочке C++ вокруг кода.net; Я не думаю, что это сработает, потому что при развертывании приложения финальные dll C++ и.net dll, содержащие код бизнес-логики, будут отдельными сущностями, а те, кто хочет получить доступ к вашей бизнес-логике, все равно смогут просто выбрать.net DLL и заглянуть внутрь.
Пишу в этой теме через долгое время. Мы приобрели программное обеспечение под названием Intellilock, которое помогает предотвратить декомпиляцию, запутывание, а также имеет мощный модуль лицензирования.
Мы не обращались к .Net Reactor, хотя он имеет больше средств предотвращения, поскольку Intellilock служил нашей цели достаточно хорошо.
Обфускатор путает код, но защитник защищает. Вы можете использовать.NET Protector: NetWinProtector
Возможно, вы захотите рассмотреть http://www.remotesoft.com/salamander/protector.html, который намного лучше, чем что-либо еще, поскольку делает невозможным декомпиляцию на язык высокого уровня.
Конечно, любой, кто является экспертом, может провести достаточно времени с вашим программным обеспечением и выяснить это, потому что он действительно декомпилирует некоторые, но он скрывает все методы set и get
Таким образом, они могут получить пик, но это все. они должны выяснить остальное, что снижает вероятность того, что кто-то просто взломает его.
надеюсь это поможет