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

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

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

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

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

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


person Kalpak    schedule 14.08.2009    source источник
comment
Поскольку никто еще не упомянул об этом, я думаю, что скажу: не существует 100% надежного способа предотвратить декомпиляцию программного обеспечения. Если кто-то действительно захочет увидеть ваши алгоритмы, он сможет это сделать. Однако вы можете запутать свой код, и, хотя это не предотвращает декомпиляцию, это затрудняет выполнение этой задачи. :)   -  person Sasha Chedygov    schedule 14.08.2009
comment
Также см. Этот вопрос: stackoverflow.com/questions/59893/   -  person Sasha Chedygov    schedule 14.08.2009


Ответы (10)


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

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

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

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

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

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

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

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

person Bevan    schedule 16.08.2009
comment
Привет, я слышал, что могут возникнуть проблемы с использованием предварительно скомпилированных обычных dll. Мы сами используем 8-9 сторонних dll для нашей функциональности. Любая идея в этих строках. - person Kalpak; 19.08.2009
comment
@Kalpak - извините, но я понятия не имею. Я читал о предварительной компиляции сборок, но никогда не пробовал. - person Bevan; 19.08.2009

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

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

Но во-вторых

  1. Рассмотрите возможность предоставления «секретных» услуг через Интернет. Вам решать, насколько это важно и возможно; но он «предотвращает» декомпиляцию, потому что у конечного пользователя даже нет кода.
person Noon Silk    schedule 16.08.2009
comment
Мне понравилась эта идея. Непосредственно перед тем, как кто-либо воспользуется услугой, он может быть аутентифицирован, чтобы стать владельцем лицензии. - person Kalpak; 19.08.2009
comment
+1 особенно, чтобы постоянно совершенствоваться и оставаться впереди. - person kenny; 04.05.2010
comment
нет даже скомпилированного приложения * - person Xpleria; 31.07.2018

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

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

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

person Ganesh R.    schedule 14.08.2009
comment
Мы пробовали парочку обфускаторов, но все они в том или ином случае терпят неудачу. Мы используем сторонние dll, разработанные на delphi. Так что у некоторых обфускаторов с этим проблемы. Таким образом, у обфускаторов есть проблема с раскрывающимися списками, заполняемыми из базы данных. Я не знаю, делаем ли мы это неправильно, но определенно мы попробовали 4-5 обфускаторов, и ни один из них не заставил продукт работать так, как он работает в студии Visua. Также ведем лог с помощью log4net. Что мы делаем с сообщениями. - person Kalpak; 14.08.2009
comment
Если вы действительно хотите, чтобы ваш код не читался, создайте жизненно важные и важные библиотеки DLL (например, лицензионные и т. Д.), Закодируйте их на C ++. В противном случае попробуйте создать библиотеки DLL C # в собственном режиме (не знаю, какую защиту это даст) msdn.microsoft.com/en-us/library/6t9t5wcf%28VS.80%29.aspx. - person Ganesh R.; 14.08.2009
comment
Я слышал, что некоторые, а возможно и многие из обфускаторов были взломаны и бесполезны. Я уверен, что для остальных это лишь вопрос времени. Лучшая защита - это хорошее нападение и продвижение вашего продукта вперед. - person kenny; 04.05.2010

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

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

person ine    schedule 14.08.2009
comment
Выглядело так - вы на самом деле пробовали? - person Jason Short; 04.01.2010

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

person Geoff Appleford    schedule 14.08.2009

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

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

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

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

person Charlie Salts    schedule 14.08.2009
comment
Конечно, это нарушает вашу способность запускать 100% управляемый код, и это также помешает вам работать со средним доверием и т. Д., И т. Д. Я полагаю, это зависит от вашего сценария. - person Jason Short; 04.01.2010

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

person user20358    schedule 14.08.2009

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

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

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

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

person Spencer    schedule 03.05.2010

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

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

person Kalpak    schedule 29.05.2010

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

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

person Kalpak    schedule 19.12.2012