Защищать .NET-код от обратного инжиниринга? - PullRequest
475 голосов
/ 03 февраля 2009

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

Также возможно преобразовать приложение C # в собственный код, и Xenocode слишком дорогой.

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

Безопасные сертификаты можно легко удалить из подписанных сборок в .NET.

Ответы [ 34 ]

9 голосов
/ 21 февраля 2010

Если вы хотите, чтобы люди могли выполнять ваш код (а если нет, то почему вы написали его в первую очередь?), То их ЦП должен иметь возможность выполнять ваш код. Для того, чтобы выполнить код, ЦП должен уметь понимать его.

Поскольку процессоры тупые, а люди нет, это означает, что люди также могут понимать код.

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

Это может быть достигнуто двумя способами: Программное обеспечение как услуга (SaaS), то есть вы запускаете свое программное обеспечение на своем сервере и разрешаете своим пользователям только удаленный доступ к нему. Это модель, которую использует переполнение стека, например. Я уверен, что Stack Overflow не запутывает их код, но вы не можете его декомпилировать.

Другой способ - модель устройства: вместо того, чтобы предоставлять пользователям свой код, вы предоставляете им компьютер, содержащий код. Это модель, которую используют игровые приставки, большинство мобильных телефонов и TiVo . Обратите внимание, что это работает, только если вы «владеете» всем путем выполнения: вам нужно создать свой собственный ЦП, свой компьютер, написать собственную операционную систему и собственную реализацию CLI . Тогда и только тогда вы сможете защитить свой код. (Но учтите, что даже самая незначительная ошибка 1024 * сделает все ваши средства защиты бесполезными. Microsoft, Apple, Sony, музыкальная индустрия и киноиндустрия могут это подтвердить.)

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

8 голосов
/ 03 февраля 2009

К сожалению, от этого не убежишь. Лучше всего написать код на C и P / Invoke it.

Есть небольшая загвоздка-22, кто-то может просто декомпилировать ваше приложение до CIL и уничтожить любой код подтверждения / активации (например, вызов вашей библиотеки C). Помните, что приложения, написанные на C, также подвергаются обратному проектированию со стороны более настойчивых хакеров (просто посмотрите, как быстро игры взламываются в наши дни). Ничто не защитит ваше приложение.

В конце концов, он работает так же, как и ваш дом, защищайте его достаточно хорошо, чтобы он был слишком трудоемким (здесь помог бы спагетти-код) и чтобы нападавший просто перешел к ближайшему соседу (соревнование :)). Посмотрите на Windows Vista, должно быть 10 различных способов взломать ее.

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

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

8 голосов
/ 04 февраля 2009

Помимо защиты покупок, вы (или ваши разработчики) можете научиться защищать от копирования.

Это идеи:

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

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

Вы можете написать виртуальную машину (но в .NET ). И поместите туда немного кода. В конечном счете, виртуальная машина запускает другую виртуальную машину, которая выполняет код. Это для части редко вызываемых функций, чтобы не слишком сильно снижать производительность.

Переписать некоторую логику в C ++ / CLI и смешать управляемый код с неуправляемым. Это укрепит разборку. В этом случае не забудьте также предоставить x64 двоичные файлы.

7 голосов
/ 22 июня 2010

Да. Это правда. Код .NET чрезвычайно легко перепроектировать, если код не запутан.

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

Visual Studio включает версию Dotfuscator . Так как это пакетная версия, вы точно не получите самое сильное запутывание. Если вы посмотрите на их списки функций, вы увидите, что именно вам не хватает (и именно то, что приложение сделает, чтобы сделать ваш код более безопасным).

Существует несколько других бесплатных или открытых исходных кодов .NET (но я не могу комментировать качество или различные методы, которые они используют):

В конце концов, ничто не идеально. Если кто-то действительно хочет увидеть, как работает ваше программное обеспечение, он увидит.

6 голосов
/ 28 июня 2011

Ну, вы не можете ПОЛНОСТЬЮ защитить ваш продукт от взлома, но вы можете максимизировать / повысить уровни безопасности и сделать его слишком сложным для взлома новичками и промежуточными взломщиками.

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

  • Запутывает ваш исходный код, очевидно, это сделает ваш исходный код беспорядочным и нечитаемым.
  • Запуск нескольких процедур случайной проверки внутри вашего приложения, таких как каждые два часа, 24 часа, один день, неделя и т. Д. Или, возможно, после каждого действия пользователя.
  • Сохраните контрольную сумму выпущенного приложения MD5 на своем сервере и внедрите процедуру, которая может проверять текущую контрольную сумму файла MD5 с реальной на стороне сервера и запускать ее случайным образом. Если контрольная сумма MD5 была изменена, это означает, что эта копия была пиратской. Теперь вы можете просто заблокировать его или выпустить обновление, чтобы заблокировать его и т. Д.
  • Попробуйте создать подпрограмму, которая может проверить, действительно ли некоторые из ваших кодов (функций, классов или определенных подпрограмм) были изменены или изменены или даже удалены. Я это называю (проверка целостности кода).
  • Используйте бесплатные неизвестные упаковщики для упаковки вашего приложения. Или, если у вас есть деньги, выберите коммерческие решения, такие как Thamida или .NET Reactor . Эти приложения регулярно обновляются, и как только взломщик распаковывает ваше приложение, вы можете просто получить новое обновление от этих компаний, а как только вы получите новое обновление, вы просто упаковываете свою программу и выпускаете новое обновление.
  • Регулярно выпускайте обновления и заставляйте своих клиентов загружать последние обновления.
  • Наконец сделайте ваше приложение очень дешевым. Не делай это слишком дорогим. Поверьте, вы получите больше довольных клиентов, а взломщики просто оставят ваше приложение, потому что не стоит тратить время на взлом очень дешевого приложения.

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

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

А теперь иди и реализуй игрушки для крекеров ...

5 голосов
/ 04 февраля 2009

Существует Salamander , который является собственным компилятором .NET и компоновщиком от Remotesoft, который может развертывать приложения без .NET Framework. Я не знаю, насколько хорошо это соответствует его требованиям.

5 голосов
/ 03 февраля 2009

.NET Reactor

Обновление

Джаред указал, что de4dot утверждает, что может его декомпилировать.

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

Мощные и гибкие функции лицензирования .NET Reactor позволяют обеспечить соблюдение условий лицензии и защитить поток доходов с помощью аппаратных и программных блокировок. Менеджер лицензий может создать пробные или постоянные лицензии за считанные секунды. Полностью документированный комплект разработки программного обеспечения (SDK) с примерами позволяет вам вызывать систему лицензирования непосредственно из вашего кода, позволяя создавать собственные расширения для системы лицензирования.

5 голосов
/ 16 марта 2009

Если Microsoft может предложить решение, у нас не будет пиратских версий Windows, поэтому ничего не очень безопасно. Вот несколько похожих вопросов из Stack Overflow, и вы можете реализовать свой собственный способ их защиты. Если вы выпускаете разные версии, вы можете применять разные методы для разных версий, поэтому к тому времени, когда первая из них будет взломана, вторая может вступить во владение.

4 голосов
/ 16 марта 2009

Вот одна из идей: у вас может быть сервер, размещенный вашей компанией, к которому должны подключаться все экземпляры вашего программного обеспечения. Недостаточно просто подключить их и проверить регистрационный ключ - они просто снимают чек. В дополнение к проверке ключа необходимо также, чтобы сервер выполнял некоторые важные задачи, которые клиент не может выполнить сам, поэтому его невозможно удалить. Это, конечно, вероятно, будет означать много тяжелой обработки со стороны вашего сервера, но это будет затруднять кражу вашего программного обеспечения, и если у вас есть хорошая схема ключей (проверка владения и т. Д.), Ключи также будет трудно украсть. Это, вероятно, более инвазивно, чем вы хотите, поскольку для использования вашего программного обеспечения вашим пользователям потребуется подключение к Интернету.

3 голосов
/ 22 июня 2010

Все, что работает на клиенте, может быть декомпилировано и взломано. Обфусификация только усложняет. Я не знаю ваше заявление, но в 99% случаев я просто не думаю, что оно того стоит.

...