Как предотвратить декомпиляцию любого приложения С#
Мы планируем разработать клиентское серверное приложение с использованием С# и MySQL. Мы планируем продавать продукт на полке, как и любую другую программную утилиту. Мы обеспокоены декомпиляцией нашего продукта, который имеет некоторые преимущества для наших конкурентов с точки зрения удобства использования и функциональности.
Как мы можем предотвратить декомпиляцию нашего программного обеспечения, поэтому бизнес-логика продукта остается неповрежденной?
Мы слышали о рефлекторе и других декомпиляторах, что делает наш код очень уязвимым для копирования.
Наша клиентская база - это не корпоративные, а практические специалисты, которые сами не могут этого делать, но наши конкуренты могут захотеть скопировать/отключить лицензирование или даже скопировать код/функциональность, чтобы стоимость нашего продукта снижалась на рынке.
Любые предложения по предотвращению этого приветствуются.
С уважением..
Обелиск
Ответы
Ответ 1
Если вы развертываете сборки .NET на своих клиентских машинах, то какая-то декомпиляция всегда будет возможна с использованием рефлектора и аналогичных инструментов.
Однако эта ситуация существенно не отличается от того, с чем вы столкнулись, если бы вы написали приложение на родном С++. Всегда можно декомпилировать вещи - если это было невозможно, процессор тоже не мог этого понять.
Вы никогда не сможете победить эксперта-взломщика - они будут рассматривать вашу безопасность как интеллектуальную загадку, которая будет решена только для вызова.
Вопрос вращается вокруг того, как трудно победить вашу практику лицензирования и возврат инвестиций.
Сядьте с таблицей и просмотрите возможные сценарии - опасность, вероятно, меньше, чем вы думаете.
Факторы, такие как "простота использования", видны в вашем программном обеспечении для любого пользователя, чтобы наблюдать - так что вы думаете, что его легко скопировать. Но хороший пользовательский опыт редок (и редко копируется хорошо), потому что большинство разработчиков (включая меня) не похожи на обычных пользователей.
Я бы посоветовал вам сосредоточиться на том, чтобы сделать работу взломщика труднее, потому что вы никогда не сможете сделать это невозможным, просто нерентабельным.
Одна возможность попробовать: возможно предварительно скомпилировать сборки в собственный код как часть процесса установки. Paint.NET делает это по соображениям производительности. Я считаю, что после того, как вы это сделаете, вы можете отказаться от исходных сборок и использовать оптимизированные собственные версии кода.
Ответ 2
Если бы это был я, я бы не стал пытаться запутывать; Я бы:
- Не беспокойтесь об этом и не стремитесь постоянно улучшаться и оставаться впереди.
Но во-вторых,
- Рассмотрите возможность предоставления "секретных" услуг через Интернет. Вам решать, насколько это важно и возможно. но он "предотвращает" декомпиляцию, потому что у конечного пользователя даже нет кода.
Ответ 3
Google для .NET Obfuscator. Вы найдете много продуктов, которые помогут в этом. Также есть вопросы, которые уже заданы в Stack Overflow.
Вот некоторые из них:
EDIT: при поиске инструментов De-Obfuscating я столкнулся с инструментом с открытым исходным кодом De4Dot, Этот инструмент поддерживает декомпиляцию обфуцированных DLL, созданных большинством коммерческих инструментов, и делает довольно хорошую работу тоже.
Ответ 4
В прошлый раз, когда я смотрел на это, Spices.Net Obfuscator выглядел лучше всего на рынке.
Нет, я не работаю для них.:)
Ответ 5
Я использую smartassembly. Он прост в использовании, а также имеет возможность отправлять отчеты о сбоях обратно, которые вы встроили.
Ответ 6
Вот аналогичный вопрос о Obfuscators. Может быть, это дает вам некоторую полезную информацию.
Ответ 7
Обфускаторы, о которых говорили другие, вероятно, очень хорошие.
Альтернативный подход, который вы, возможно, не рассмотрели, - это код некоторой основной бизнес-логики с использованием языка, который полностью скомпилирован в машинный код, например С++.
Преимущество этого заключается в том, что для кого-то гораздо сложнее декомпилировать ваш код. Недостатком этого является то, что у вас есть код на двух языках для поддержки. Это может быть не самый лучший подход для вашей ситуации, но полезен в тех случаях, когда требуется лишь путать небольшую часть кода, в то время как остальная часть кода является пухом UI.
В качестве примера, ваш пакет медицинского программного обеспечения может выполнять обнаружение кромок, скажем, определенных желез, чтобы сообщить врачу размер указанной железы. Алгоритм вычисления размера железы из растрового изображения будет содержаться в DLL, написанной на С++.
Ответ 8
чтобы ответить на ваш вопрос об обертке С++ вокруг кода .net; Я не думаю, что это сработает, потому что при развертывании приложения окончательная dll dll dll и .net, содержащая код бизнес-логики, будут отдельными объектами, а те, кто хочет попасть в вашу бизнес-логику, по-прежнему смогут просто выбрать .net dll и заглянуть внутрь.
Ответ 9
вы можете рассмотреть Remotesoft Salamander Protector
это намного лучше, чем что-либо еще, что делает невозможным декомпиляцию языка высокого уровня.
Конечно, любой, кто является экспертом, может потратить достаточно времени на ваше программное обеспечение и понять его, потому что он декомпилирует некоторые из них, но он скрывает весь набор и получает методы
Таким образом, они могут получить пик, но это все. они должны выяснить остальное, что снижает вероятность того, что кто-то просто взломает его.
надеюсь, что это поможет
Ответ 10
Написание этой темы через долгое время. Мы приобрели программное обеспечение под названием Intellilock, которое полезно для предотвращения декомпиляции, обфускации, а также имеет сильный модуль лицензирования.
Мы не пошли на .NET Reactor, хотя у него было больше средств контроля, поскольку Intellilock хорошо служил нашей цели.
Ответ 11
Intellilock хорошо зарекомендовал себя как с точки зрения обфускации, так и лицензирования. Но я бы не рекомендовал продукт, так как поддержка не соответствует значению. Мы не получили ответов вовремя о проблеме, с которой мы столкнулись. Мы должны были искать и исследовать самостоятельно или даже изменять бизнес-требования для достижения некоторых целей.
С помощью этого ответа я не собираюсь продвигать или понижать качество любого программного обеспечения, но просто хочу, чтобы люди знали о продукте, который мы используем, чтобы они могли принять мудрое решение.
Обелиск
Ответ 12
Обфускатор смущает код, но защитник защищает.
Вы можете использовать .Net protector: NetWinProtector