Здравствуйте, 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.
Ладно, всего не расскажешь, будут вопросы — отвечу.