Вопрос

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

как бы кто-нибудь смог это сделать, говоря практически?Итак, у них есть моя библиотека dll, они должны как-то ее декомпилировать, затем закомментировать вызов функции, чтобы проверить лицензию, а затем перекомпилировать ее?Декомпилятор должен быть действительно хорошим, чтобы код все еще компилировался!

Это было полезно?

Решение

Попробуйте открыть свое приложение с помощью Reflector . Вы, вероятно, будете удивлены: -)

После того, как взломщик обнаружит правильное местоположение в вашем коде, он может использовать комбинацию ildasm / ilasm чтобы убрать проверку из вашего приложения - даже если код, сгенерированный Reflector, не скомпилируется.

Другие советы

Если исходный код был нормально скомпилирован, его очень легко декомпилировать .СЕТЕВЫЕ сборки.

Вы могли бы использовать .NET Отражатель, первоначально разработанный Лутцем Редером, в настоящее время поддерживается Redgate Software.В нижней части этого ответа есть скриншот, который дает вам представление о том, что делает Reflector.

Вы можете просматривать свои пространства имен и классы и просматривать исходный код и методы на вашем любимом языке .NET language.Denis Bauer's Файловый сборщик это позволит вам (или злым хакерам в вашем случае) преобразовать его в решение VS и внести изменения в программу.

Существуют некоторые контрмеры, такие как использование обфускатор кода чтобы сделать ваш код практически нечитаемым.

В StackOverflow есть несколько других интересных вопросов по этой теме:

Скриншот из Reflector:

alt text

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

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

Вот несколько советов по защите вашего кода .NET, который я нашел в Интернете:

http://blogs.msdn.com/ericgu /archive/2004/02/24/79236.aspx

Просто отметьте, что ни один из обсуждаемых методов не эффективен на 100%, вопрос лишь в том, сколько обручей вы заставите взломщика прыгнуть.

.NET-компиляция в целом довольно проста: чтобы почувствовать это самостоятельно, просто получите копию . NET Reflector и попробуйте.

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

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

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

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

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

Эксплуатация программного обеспечения от Greg Holland & amp; Гэри МакГроу - отличное введение.

Лучше всего не отказываться от использования лицензионного ключа. Все, что вы делаете, может быть взломано определенным пользователем, и вы рискуете добавить проблемы, которые мешают законным пользователям использовать ваше приложение. Я даже видел код, который был защищен с помощью ключа Hasp . Шифрования вашего лицензионного ключа и обфускации вашего кода должно быть достаточно, чтобы препятствовать оппортунистическим атакам, кроме этого нет смысла.

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

Даже без Reflector люди делают это целую вечность. По сути, вы смотрите приложение с помощью отладчика, что-то вроде WinDBG, и затем выясняете, когда происходит проверка лицензии. Вы смотрите возвращаемое значение, а затем просто исправляете приложение, чтобы перейти непосредственно к «все хорошо» проверять.

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

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

"Слишком"

Любой "стандартный" / обычный механизм проверки лицензии является мишенью для инструмента автоматического удаления.И в нескольких коммерческих приложениях .NET, над которыми я размышлял, эти "Слишком тривиальные" проверки кажутся обычными.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top