Re: [защита] .NET-приложений (C#)
От: olerysc Россия  
Дата: 31.03.10 09:40
Оценка:
Здравствуйте, Alexey Neorov, Вы писали:

AN>Не хотелось бы смешивать текущую тему с этой
Автор: IntDex
Дата: 24.03.10
, т.к. хотелось бы обсудить не что-то абстрактное, а именно зашиту под NET. Ко мне как-то обратился человек, и сказал, что взломал мою программу за 10 минут. Я удивился, стал сам разбираться. И вправду, поколдовав полтора часа, я понял как это просто (ildasm -> notepad -> ilasm).


AN>Такое явно не годится. Нашёл в инете netObf, бесплатную версию обфускатора. Упаковал прогу. Ничего непонятно в ildasm. Нашёл в инете деобфускатор, который приводит имена в более читаемые. Прогнал через деобфускатор. Далее notepad -> ilasm. И прога опять сломана.


AN>Сделал программу более запутанной, часть алгоритмов стал шифровать внутри программы через динамические сборки, сделал привязку к серверу (сайту). Т.к. я знал, что делать, я опять быстренько всё отломал. У неподготовленного крякера это выйдет чуть дольше.


AN>Какие еще есть варианты? Или может я что-то упустил?

AN>Заранее спасибо за любые советы.

Качественную защиту .NET-приложений построить сложнее, чем для native.

Тут важно понять, что вам именно нужно. Какой уровень защищенности вы хотите достичь? Нужна ли вам система лицензирования? Что вы собираетесь защищать в своей программе? Сколько готовы вы заплатить за защиту? Сколько стоит вам приложение? Универсальных решений нет — нужно исходить из ваших потребностей и возможностей.

Обфускаторы — это утилиты для !запутывания! кода и данных. В основном они ограничиваются переимнованием имен классов, методов, полей и других объектов; шифрованием строк и констант; простейшими преобразованиями графа потока управления.

Протекторы .NET — это уже какая-никакая защита (то есть банально ildasm -> notepad -> ilasm цикл не пройдет). В большинстве своем протекторы пытаются строить защиту на основе наработок для Native. Но из-за особенностей JIT-компиляции проще поддается взлому чем их Native-сородичи.

Модная направление в сфере защиты .NET (да и не только .NET) делать защиту, построенную на принципе виртуальной машине. Грубо говоря, методы с MSIL заменяются на вызову к этой новой виртуальной машине, и во время первого вызова необходимого метода происходит транслирование кода защищенной виртуальной машины в MSIL. Защищенная виртуальная машина сейчас строиться по гибридной managed-unmanaged технологии..

Если бы я строил защиту .NET, то я бы построил многорубежную защиту — обязательно обфусцировал сборки, чтобы избавиться от избыточных метаданных, которые очень пригодяться злоумышленнику; затем защитил критические методы с помощью защищенной виртуальной машины, а сверху exe-файл приложения накрыл еще и протектором. После этого я еще раз проверил функциональность своего уже защищенного приложения (не стало ли оно падать?), а также померил профайлером его быстродействие.

Если я бы хотел воспользоваться качественным бесплатным обфускатором, то выбрал бы Eazfuscator.NET (на первом месте) или Phoenix Protector (это тоже обфускатор — хоть называется протектором)

Если у меня были некоторые СВОИ средства (500-700$) — то платные брендовые (Dotfuscator, SmartAssembly, WiseOwl, 9Rays) я бы покупать не стал — они по уровню защищенности не стоят своих денег. Да, GUI иногда красивый, но по защите ничего интересного.

Протекторы .NET Reactor, CodeVeil — уже более интересно, но слышал, если просечь фишку, по которой они сторояться — взлом приложений, защищенных ими, можно поставить на поток

У Microsoft есть свой SAS-продукт для защиты .NET — с точки зрения защищенности достаточно интересен.

Есть еще интересные защиты для .NET c применением электронных ключей — у Alladin — HASP, у Актив — Guardant.

Ладно, всего не расскажешь, будут вопросы — отвечу.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.