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

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

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

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

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

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

С уважением..

Обелиск

Ответ 1

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

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

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

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

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

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

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

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

Ответ 2

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

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

Но во-вторых,

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

Ответ 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