.NET декомпиляция, насколько это просто? - PullRequest
13 голосов
/ 05 ноября 2008

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

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

Ответы [ 9 ]

29 голосов
/ 05 ноября 2008

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

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

14 голосов
/ 05 ноября 2008

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

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

Вы можете просматривать свои пространства имен и классы и видеть исходный код и методы на своем любимом языке .NET. Денис Бауэр FileDisassembler позволит вам (или злым хакерам в вашем случае) преобразовать его в решение VS и внести изменения в программу.

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

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

Снимок экрана с отражателя:

alt text

5 голосов
/ 05 ноября 2008

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

2 голосов
/ 05 ноября 2008

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

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

2 голосов
/ 05 ноября 2008

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

Эксплуатация программного обеспечения от Greg Holland & Gary McGraw - отличное введение.

2 голосов
/ 05 ноября 2008

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

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

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

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

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

2 голосов
/ 05 ноября 2008

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

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

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

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

1 голос
/ 10 декабря 2011

"Слишком"

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

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

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

1 голос
/ 05 ноября 2008

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

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

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

...