22 июня 2010 в 00:20

Обзор обфускаторов для .NET

.NET*
Смею полагать, %username%, что ты знаешь, что такое обфускация, зачем она нужна в мире .NET и чём отличие control flow-обфускации от шифрования MSIL-кода.
Предполагается также, что ты видел .NET Reflector и знаком с каким-либо символьным отладчиком, я приведу примеры на WinDbg.

Темой обфускаторов я занимаюсь довольно долго, но недавно пришлось таки актуализировать знания.
Не так давно передо мной стояла задача выбрать хороший обфускатор для .NET4. Просмотрев кучу софта, я составил небольшой обзор, куда постарался включить самые известные обфускаторы.

Общие выводы и рассуждения

  • Бесплатные обфускаторы весьма слабые и пригодны только для простого переименования. О control flow знают из них лишь немногие;
  • Существуют весьма неплохие решения (control flow, MSIL encryption) стоимостью до $500;
  • Взрослые решения стоят около 5000, но к сожалению, для многих из них есть распаковщики. Некоторые из них крякнуты.
    Крякнули обфускатор — значит поняли его систему защиты. На помойку такой обфускатор.
  • Есть решения «против быдлохакеров» — сборка шифруется полностью и расшифровывается на лету. Взломать символьным отладчиком такую сборку проще простого.


Под катом подробнее о каждом.


Записи в табличке идут по алфавиту, дабы никого не обижать.
Название и URL Стоимость Control flow Шифрование MSIL Подробно...
.NET Reactor $180 + + Шифрует код, сломать его довольно трудно, но возможно, есть распаковщик
{SmartAssembly} $795 + - Используется RedGate-ом. Крякнут.
Aspose.Obfuscator (-) (-) (-) Проект более не поддерживается
Assemblur Free - - Плагин к студии + консоль. Почти ничего не обфускатится
Babel $250 + ? Что-то шифрует, но в рантайме можно выполнить DumlIL, возможно, полная версия работает хорошо
BitHelmet $250 ? ? Упал, сказав, что .NET отсутствует
C# Source Code Obfuscator ? - - Похоже, работает с исходниками .NET. Интересный подход, но кроме описания и примера я ничего не нашёл
CilSecure > $1000 ? ? Платный обфускатор, даже без триала. Кот в мешке.
CodeArmor ? ? ? Ещё один платный обфускатор, весьма мутный и тоже без триала. Поддержка не ответила.
CodeVeil $900 + + Известен тем, что палится в антивирусах. В целом, хорошая штука
CodeWall $400 + + Вменяемый обфускатор
Decompiler.NET $550 - - Заброшен 3 года
DeepSea $200 ± - Склонен делать много switch-ей. В целом, неюзабельно.
DesaWare $1500 + ? Нет .NET 4.0
DNGuard HVM $900 ? ? Глючная инсталляха без половины кнопок, первое же приложение упало
Dotfuscator $1900 + ? Community-версия весьма скудная, а Enterprise дорогой, но возможно, оно того стоит
dotNetProtector $500 + + Добавил к проекту более 4 MB своих DLL-ек
Eazfuscator.NET Free - - Простой rename
Goliath.NET $115 + ± Сборка рефлектором не открывается, но в WinDbg видно весь исходник
NetOrbiter Free - - Смешной обфускатор. Сделал свой прокет, куда полностью скопировал мой exe-шник и что-то дописал в добавок.
Obfuscar Free - - Простой rename, основанный на Mono.Cecil. .NET 4.0 не поддерживает
Obfuscator.NET $200 ? ? Сделанная сборка сразу же упала. Даже на .NET 3.5.
PCGuard for .NET $400 ? ? Больше ориентирован на лицензирование, чем на обфускацию. Триал не прислали. Посмотреть было бы весьма интересно.
Phoenix Protector Free (-) (-) Даже .NET 3.5 не держит
Salamander.NET $800 - - На примере, приведённом на сайте, рефлектор, конечно, ругается, подозревая засаду, но дизассемблит на ура
SharpObfuscator Free - - По всей видимости, продукт давно заброшен
Skater.NET $100 - - Странная штука, переименовала несколько методов + искала старый ILDASM. Вероятно, заброшен.
Spices.NET $400 - ± Шифрует всю сборку целиком, что плохо
VMWare ThinApp > $5000 + + Полученное приложение может запускаться даже без .NET. Сурьёзная штуковина
Xenocode PostBuild > $1000 + + Сам обфускатор крякнут, что наводит на не очень хорошие мысли


Подробнее об особо интересных особях



.NET Reactor

Шифрует код при помощи NecroBit (название их технологии), на форумах ходят слухи о том, что NecroBit успешно крякнут. Возможно, я просто этого не нашёл, т.к. особых усилий не прилагал. Код разобрать не получилось, WinDbg тоже ничего не нашёл.
Reflector:
.NET Reactor

Что-то извлечь при помощи WinDbg можно, но IL-код методов не отдаётся.
.NET Reactor

{SmartAssembly}

Его не так давно купила компания RedGate. Честно говоря, выбора RedGate-а я не понял, {sa} не умеет даже шифровать MSIL. Посидев с отладчиком, можно разобраться в коде. Я не советую использовать этот обфускатор, цена $750 явно не соответствует качеству.
Всё, что делает этот обфускатор с кодом — это обфускацтя control flow в примерно таком виде:
L_1 br.s L_4
L_2 br.s L_3
L_3 ret
L_4 push
L_5 ldc.i4.1
L_6 br.s L_2

Reflector в C# код не разбирает (хотя это сделать несложно), но в IL — отлично:
{SmartAssembly}

Salamander.NET

Скачал супер-пример с их сайта. Обещали, что Reflector не откроет. Reflector, в самом деле, обругался, но открыл:
Salamander.NET

Babel (тот, который не free), CodeWall, dotNetProtector

Продукты одного класса, я считаю, что весьма подходят, если требуется защита кода от дальнейшего рефакторинга и излишнего любопытства.
Babel:
Babel
Однако, WinDbg с успехом показал, что внутри сборки, сделанной Babel (вероятно, потому, что у меня была community версия; полную, к сожалению, я не проверял):
Babel
C# Source Code Obfuscator

На сайте пишут, что работает с исходниками, при этом получается заобфусцированный исходник. Очень интересный подход, но к сожалению, скачать сам обфускатор нельзя. Минус — при таком подходе невозможно шифрование MSIL и неверные инструкции.

XHEO CodeVeil

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

Использовать можно, но ждите сюрпризов.

dotNetProtector

Сборка получилась достаточно хорошая, но меня поджидала засада — со сборкой пришли 4 МБ DLL-ек от этого обфускатора:
dotNetProtector
Spices.NET

Весьма известный продукт, я был удивлён, что полученные приложения так просто взломать:
Spices.NET

Goliath.NET

Рефлектором сборку не открыть, она зашифрована. Косяк в том, что сборка зашифрована полностью, и расшифровывается она после того, как запустится приложение. После расшифровки никакой защиты в памяти:
Goliath WinDbg

Eazfuscator.Net

Обфускатор бесплатный. Обидно, что умеет делать только простой rename. Что может порадовать (лично меня больше интересуют консольные или MSBuild-версии) — достаточно простой процесс обфускации, всё сводится к перетаскиванию файла сборки. Вот что получается в итоге
Eazfuscator.NET

VMWare ThinApp, Xenocode PostBuild

Обфускаторы построены по схожему принципу, умеют исполнять код, внедряя в приложение предкомпилированные сборки .NET, что исключает вероятность перехвата вызовов JIT-компиляции.
Полученные приложения могут запускаться даже без установленного .NET на машине. Размер получившегося приложения — 10..50 МБ, в зависимости от того, какие библиотеки будете использовать.
Стоят эти решения очень дорого. Но, к сожалению, на PostBuild ходят кряки (даже на последний). Вероятно, в известных кругах есть и готовые распаковщики.

Что же тебе выбрать, %username%?


Однозначный ответ на этот вопрос не дать, всё зависит от того, что для тебя является ценностью в коде:
  1. Весь код в совокупности — важна не одна «фишечка» в коде, а код полностью. Зашифруй код каким-нибудь простым обфускатором, лучше зашифровать MSIL. Если важен действительно весь код, расшифровать его полностью будет сложнее написания заново, и никто этим не будет заниматься;
  2. Отдельная «фишечка» — например, проверка ключа. Я бы посоветовал такой код вообще в паблик не давать, лучше резать функционал в trial-версии. В полной версии ключ проверить обязательно, но риск воровства меньше. Тем не менее, я бы посоветовал использовать обфускатор посерьёзнее.


А что использую я?


Ничего из вышеперечисленного. Я использую свой собственный обфускатор. Это платформенно-зависимое шифрование сборки по кусочкам, по типу .NET Reactor.
Затраты на его создание обошлись примерно $3000-$5000. Да, он ничем не лучше существующих, но есть одно но — принцип обфускации не объявлен публично, пощупать его нельщя. Чтобы его взломать, надо просто потратить больше времени.
Как говорится, думайте сами, решайте сами…
@Antelle
карма
209,7
рейтинг 0,0
Web engineer
Похожие публикации
Самое читаемое Разработка

Комментарии (72)

  • 0
    Хотелось бы поподробнее узнать про обфускаторы выполняющие код на своей виртуалке, в частности то, как они дружат с IoC контейнерами и прочими плюшками, которые могут использовать отражение внутри себя.
    • +1
      Наверное как и все обфускаторы — предоставляют аттрибуты вроде [DoNotObfuscate] и т.п. :)
      • +1
        Я всё жду когда обфускаторы научатся видеть отражение и как нибудь разруливать эту проблему.
        Это к вопросу работы с унаследованным кодом, сам предпочитаю использовать отражение по типу аттрибутов, им обфускация ни по чем.
        • +1
          Некоторые производители ищут вызовы Reflection ещё на этапе обфускации. Видел один раз такое решение, но впоследствии производитель от этого отказался, решили, что очень трудно. А жаль.
  • +2
    Огромное спасибо за обзор. Не предполагал, что конкретно .NET-обфускаторов настолько много.Вопрос — за сколько времени такая подбора гуглится?
    И ещё — вы интересуетесь только обфускацией в применении к .NET программам, или какое-то время разбирались в обфускации в других областях?
    • 0
      Их ещё больше. Я постарался написать о тех, с которыми когда-либо общался, и о самых известных.
      Обфускацией интересуюсь в принципе, ранее разбирался с решениями для jav-ы, когда ещё ей занимался. Сейчас детально изучаю упаковщики JS.
      • 0
        Ой, а что вы нарыли пор обфускацию java? Правильно ли я понимаю, что лучше всего обфускироваьт исходники?
        • 0
          На вскидку — ProGuard, jGuard, DashO, JCloak, Jshrink
          Нет, Вы понимаете неправильно, обфускатить лучше всего байт-код (или IL). Обфускация исходников не даст всех фич обфускации.
      • 0
        Можно еще в список добавить Oreans Technology. Целый комплекс программ для защиты кода. В частности Code Virtualizer и Themida
  • +2
    Скажите, пожалуйста, зачем используете обфускатор? Вы пишите настолько уникальный код?
    • 0
      Я полагаю основная причина для большинства всё же в том, чтобы не дать нелегально пользоваться софтом.
      • 0
        А у меня решение проще — выносим лицензионную часть в C++. И пусть «крякают».
        • +3
          Вы имеете ввиду часть логики или валидацию ключа? Разве во втором случае будет не достаточно просто обойти это покопавшись в MSIL?
          • +1
            И таки да. MSIL могут «крякнуть».
            С проверкой ключа обычно ещё выносить в нативный код часть какой-нибудь жизненно-важной логики, если это возможно.
        • 0
          Аналогично. С++ тоже лучше чем-нибудь запаковать, чтобы затруднить работу.
          Но всё же ещё есть основная логика приложения логика в .NET, которую тоже надо закрыть.
          • 0
            Паковка не спасет. Криптовка + эмуляция на ВМ — может быть, а паковка в большинстве случаев снимается за минуту.
            • 0
              Согласен. Должно быть комплексное решение — и паковка, и обфускация control flow. Всё вместе затруднит жизнь хакера.
              • +1
                а вынос критичной части софта в SaaS сделает работу крекера бессмысленной.
      • +1
        Так а чем поможет? То что твой метод CheckLicense() заменять на _a1()? Ну прибавили на пару часов работы для взломщика, но если надо будет, все равно найдет как взломать.
        • 0
          Если брать нормальный обфускатор, то он прогоняет код на своей виртуальной машине + запутывает логику. Ну и самому надо не плошать и ставить тайм-бомбы и раскидывать авторизацию по всей программе (желательно постпроцессингом сборки по аттрибутам, чтобы не засорять код).
          • +4
            Ну это еще пару часов работы для взломщика. Что уж там обфускатор то запутать может, если есть пару методов, которые проверяют лицензионность ПО. Ну все же программы, как показывает практика взламывают, просто на любые нужно больше или меньше времени (зависит от популярности вашего продукта).

            Пишите shareware — так не надейтесь, что ваше ПО на 100% будут использовать лицензионное. Радуйтесь, что выпустили для него кряк — значит пользуется популярностью, пускай пользуются крякнутым и рекламируют ваш продукт, дойдет до того, что без него жить не смогут и начнут покупать в enterprise (а там сейчас большинство лицензионного). Либо надейтесь на честных забугорных пользователей.

            Пишите ПО для корпоративного… А кому-нибудь нужно это ПО без поддержки?
            • 0
              Ну про пару часов не скажите, да и не только удалением метода ограничивается взлом, если хорошо запутана логика, да ещё и пускается на неродной виртуалке, то некоторый софт проще правда купить.
              • +1
                Помню замечательный редактор, который после большинства попыток взлома поддавался, но в 95% случаев вис на сохранении файла.
                • 0
                  хрестоматийный пример — продукты ABBYY.
              • 0
                Неродная вируалка — очень интересный случай. Из одного уважения к авторам софт купить можно.
        • +2
          Если так рассуждать, то вообще любой софт можно взломать. Обфускация — не панацея от взлома ПО, это лишь барьер, который повышает стоимость (=>целесообразность) взлома.
          • 0
            Любая защита — это не панацея. Принцип нормальной защиты — удорожание взлома, когда дешевле купить, чем ломать.
            Ну и стоит помнить, что многие производители софта создают т.н «утечки» — сами выкладывают свой якобы взломанный софт на варезниках. Чего не сделаешь для рекламы своего софта.
        • 0
          OK, вы нашли метод CheckLicense(), что дальше? Если вы его удалите через Reflexil, программа не заработает, а почему она не заработала вы не узнаете если не разберете этот метод.
          • 0
            Ну я даже не представляю, что уж там сложного такого можно будет написать в этом методе? Свою реализацию шифрования? У меня так такое мнение по этому поводу — antelle.habrahabr.ru/blog/97062/#comment_2977220
        • 0
          Иногда цель обфускации — именно в умеличении часов хакера, потраченных на кряк. Если это время окажется слишком большим, хакер сдастся и купит софт (возможно). Если, конечно, это не идейный хакер и софт не важен миллионам пользователей.
    • 0
      Иногда надо показать демку, как работает твой софт. Давать полный исходник каждый раз не хочется.
      Если заниматься shareware — придётся защищаться, чтобы код вообще не украли.
      • +1
        ну если отдадите полностью работающую демку (без shareware), то какой смысл в обфускации? Демки лучше показывать у себя :)
        • 0
          Демка может работать и не полностью, а частично. А хакеру за её взлом ещё надо будет заплатить.
          Иногда показать у себя невозможно, заказчики разные :(
  • +1
    Использую {smartassembly} для мерджинга. Обфускация не особа волнует.
    • +1
      Аналогично. Мержит неплохо. Удобная фича, которая не у всех работает правильно.
      • 0
        Да. Единственная проблема — не мержит unmanaged или MC++. Что печально.
    • 0
      Использовал {smartassembly} и для обфускации тоже:
      — умеет сжимать/шифровать ресурсы/строки
      — иногда шифровал методы так что при открытии с ошибкой валился Reflector (даже в IL)
      — из интересных идеи была возможность встроить отправку сообщений об ошибках, но не понравилась цена :)
      — написал для 3 версии поддержку msbuild (позже ее включили в поставку), сделал еще шаблон для автогенерации проекта sa (чтобы reference были в актуальном состоянии) так и осталось для себя.
      — в 4 версии была фича, как показано в .NET Reactor — сборка не читалась Reflector'ом вообще
      — работали даже хитрые сборки со ссылками на кривой код, загружаемые другим кодом в виде плагинов (другие обфускаторы ломали сборку и она либо не загружалась, либо падала с ошибкой)
      — можно было подписать ключом сборки ссылающиеся на неподписанные (сторонние) сборки! ;)

      Скачал 5 версию — либо Reflector поумнел, либо… Сборка открывается, на методах не падает.
      Цену подняли, функционал тот же или даже хуже. Red Gate такой Red Gate.
      • +1
        Ребята из отделов RedGate, вероятно, соревнуются — кто кого
        • 0
          Да у них сейчас мегазадача стоит — скрестить рефлектор со смартассембли, чтобы выпустить полноценный продукт в одном флаконе, как у 9Rays.Net и Remotesoft, у которых есть интегрированная среда для работы.
  • +1
    necrobit — фигня, оно просто портит PE-заголовок файла, с помощью CFF Explorer — файл можно восстановить чтобы открыть тем же ildasm-ом или рефлектором.
  • +3
    Ещё не рассмотрено то, как обфускаторы красиво ломают приложение. Например структуры, которые маршаллятся, p/invoke или рефлекшен. Это не тема данного поста, но просто один из вариантов выкинуть часть обфускаторов в помойку.

    А я бы ещё выкинул те, которые из ломают валидацию .NET сборки, защиты добавляют немного, и призрачной, а проблем в случае чего могут добавить вагон.
  • +1
    По моему, единственное, для чего полезен обфускатор — максимально усложнить понимание кода. Не бывало еще защиты, которую не смогли бы сломать. Кроме «защиты неуловимого Джо» ;)

    Кстати, Salamander.NET давно заброшен, на сайте стоит копирайт за 2008 а реально он не обновлялся еще дольше.
    Из опробованных мной обфускаторов больше половины портили мой проект до полной незапускаемости, так что вопрос безглючности тоже нельзя упускать из виду.
    • 0
      У Salamander были проблемы с совместимостью, когда вышла .Net 2.0 и надо было защищать проекты, которые содержали .Net 1.1 и .Net 2.0 сборки. Все из-за того, что Salamander — не нэтивная прога для .Net, написанная на сях, и использующая COM-интерфейсы для доступа к метаданных сборок. Чтобы допустим работать со сборками 2.0 Саламандер должен инициализировать именно интерфейсы от .Net 2.0 а для сборок 1.0/1.1 — интерфейсы от 2.0. а это не получится в одном сеансе. Они выпутались, и стали предлагать при запуске — какую машинку инициализировать. Но сейчас-то на рынке как минимум 4 версии, плюс CF, Mono и пр.
      Вот такая незадача вышла.
  • +1
    перенесите, пожалуйста, пост в блог .NET, чтобы он смогу выйти на главную хабра
    • 0
      Спасибо. Перенёс.
  • 0
    Среди рассмотренных не было IntelliLock. У нас его используют.
    * Шифрует сборку, при попытке открыть в рефлекторе — тот падает.
    * Больше ориентирован для создания Trial версий вашего продукта (по времени, до определенной даты и другие). Причем просто менять время на компьютере не спасает от триала
    * Сам же генерирует файлы лицензии, позволяя привязывать их к железу и OC, и устанавливая ограничения на апгрейд этого железа (например не более X-обновлений железа). Генератор файлов лицензии, либо с помощью SDK пишем свой
    * Лицензию можно деактивировать offline (например по телефону, чтобы запросить новую для другой железки).
    * Свой полноценный SDK, необходимый только во время разработки. Затем весь его код подменяется реальной защитой
    * Может прицепиться к студии в виде плагина

    Пользоваться стали совсем недавно, минусов пока описать не могу. Единственный замеченный — можно запускать продукт на виртуальной машине, тогда Trial не страшен

    www.eziriz.com/intellilock.htm
    • 0
      Спасибо. Посмотрю обязательно.
    • 0
      Это родной брат .Net Reactor, который заточен под лицензионную защиту приложения. В качестве обфускации используется именно этот модуль.
    • 0
      Смотрю в сторону IntelliLock… но пугает абсолютное отсутствие поддержки производителя.
      На почту не отвечают, на телефоны тоже. Если погуглить — это у них врожденное, многие мучаются.
      Вам удалось как-то связаться с разработчиками? Или не было нужды?
      • 0
        Купил вчера, версия 1.7.0.0
        Много чего есть, но явно сырой:

        Пипец №1) С дефолтными настройками обфускации и лицензионного контроля exe вырос в 2 раза, время запуска увеличилось с 1 сек до 10 сек…
        Пытался понять почему так медленно открывается, убрал даже все галочки, а он в логе все равно пишет «Applying Locks», «Optimizing Code», «String Encryption». Сохранял/переоткрывал файл проекта => галок нет, а логи рандомно то применяют защиту, то не применяют. При этом файл оптимизировать по запуску не удалось, он все равно долго открывается. Поддержка молчит…

        Пипец №2) Тестировал систему защиты по дате, поставил уже прошедший срок. После одной из генераций, защита не сработала. А если у всех пользователей она встанет как полная версия? Кранты. Воспроизвести правда не удалось.

        Пипец №3) В коде утечки: дорос до 400мб за каких-то полчаса-час

        В итоге жалею что поторопился и не потестил Trial.
        • 0
          Проблема 1) решаема через установку в VS x86 для CPU. Причина в WMI.
  • 0
    Спасибо за статью! Я как-то сам начал писать аналогичную, но к сожалению, уже полгода как не занимаюсь дотнетом, и потому её забросил…
  • +1
    С каких пор ThinApp попал в обфускаторы кода? ThinApp, ровно как и Molebox & etc. является лишь враппером с парой-тройкой приемов и опциональной упаковкой нутра. Снимается давно и постоянно — в итоге получаем 100% натуральное нутро, которое уже спокойно исследуется. Думаю и с .Net'ом там дела также обстоят.
    • 0
      .Net-ный код перед упаковкой они тоже обфусцируют.
      Ввести хакера в заблуждение могут ещё заобфусцировав код некоторых сборок, входящих в состав .NET.
      Насколько просто снять распаковку современного ThinApp — к сожалению, не могу сказать.
      • 0
        ?
        • 0
          Да, действительно в фичах на их сайте не заявлено.
          Так говорил их саппорт год назад, когда я с ними общался. Где-то здесь подвох…
          • 0
            На самом деле задачи ThinApp'a далеки от защиты (обертывание лишь косвенно влияет на протекцию), а уж тем более далеки от нетривиальной задачи обфускации кода в .net приложениях / сборках. У них и так хватает проблем и заморочек, поверьте :)

            И по сей день ThinApp не считается протектором, в андеграунде уже давно есть чуть ли не статик анпакеры (я б даже сказал анврапперы).
  • +1
    Было бы отлично еще сравнить производительность кода после обфускации. Многие офускаторы неприменимы еще и по этому параметру.
  • –4
    Не нужно. Ибо многие уже научились зарабатывать на другом. А управляемый код изначально предназначен для другого, и уж тем более обфускация в него не закладывалась.
  • +2
    Интересная статья. Однако есть у обфускации один маленький, но грустный бяк.
    Конкретнее — потенциальная возможность наведенных багов, т.е. багов обфускатора. Если не пугает такая штука — пользуемся. Пугает — ваяем что-то сами. Вот нас пугает :) И уж особенный ужас испытывается при мысли об обфускации всего кода, пусть и простой. Итог — код не обфусцируется вообще. Кому надо — тырьте. Другое дело, что сами фишки, реализованные в этом коде, местами защищены патентами, административная мера пресечения, так сказать.

    Вообще, критичный (ну совсем критичный) код утащен в шифрованную сборку, которая расшифровывается сишной библиотекой (в криптопамять, ессно), она же обрабатывает вызовы к этой библиотеке. Из серии «если смогли стырить — приходите работать». Что, в принципе, тоже не панацея, так как весь код так защищать заколебесси.
  • 0
    Еще есть Inquartos- покупали, все шифрует, ренеймит непечатными символами, гибко настраивается, например, умеет шифровать только строковые константы, при желании.
    Что немаловажно, поддерживает и .NET Compact Edition- вод винду мобайл. В целом довольны, хотя есть ряд неувязок.
    • 0
      Тоже покупал Inquartos. Мог бы с таким же успехом выкинуть деньги на ветер…

      GUI обфускатор долго висит, периодически выскакивают unhandled exceptions, большая часть заявленного функционала приводит к отказу работы обфусцируемого приложения…

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

      В общем, на него деньги тратить не советую, хоть цена и заманчива по сравнению с другими обфускаторами…
  • 0
    Есть еще boxedapp, вроде в табличке его нету вроде. Это продукт вроде Thinapp-а.
  • 0
    Пользуемся .NET Reactor'ом, в целом довольны. Из минусов — суппорт просто никакой, после защиты увеличивается время старта программы.
    Для следующего проекта планируем потестировать альтернативы, спасибо за список :)

    Из интересных, не вошедших в обзор, еще есть CodeFort — появился недавно, помимо прочего поддерживает обфускацию Xaml/Baml (по заявлению разработчиков).

    Так же присматриваемся к Crypto Obfuscator — по описанию выглядит интересно, есть менеджер лицензий от того же разработчика.
    • 0
      Про CodeFront не слышал, определённо посмотрю, спасибо. Интересует особенно, как он справляется с XAML. И какой после этого получается XAML.
    • 0
      CodeFort интересен тем, что имеет бесплатную более ограниченную версию. Бесплатная версия делает переименования и шифрование строковых констант. С обфускацией нашего кода справился продукт лучше, чем Dotfuscator, который «сломал» логику работы программы и непонятно, что с ней стало происходить — сломанный метод крэшится в Reflector'е при декомпиляции.
  • 0
    Проводил подобный анализ, когды выбирал обфускатор для Windows Mobile 5/6.x.

    Из всех заявленных кандидатов остались .Net Reactor и {smartassembly}. Многи отвалились из-за неподдержки .Net Compact Framework или из-за того, что приложения после них вообще переставали запускаться.

    {smartassembly} дорогой и взломан. При его использовании периодически приложение вываливалось. Ничего поделать не смогли.

    .Net Reactor остался как единственный из кандидатов. Показал себя хорошо, им до сих пор и пользуемся. После его применения в приложении возникало несколько ошибок, которые в чистом коде не воспроизводятся — искали долго и упорно, щас всё в норме.
  • 0
    Мой выбор — {smartassembly}. Основное в обфускаторе — control flow и переименование, чтобы нельзя было восстановить исходники и сложнее было разбираться хакеру. Шифрование IL ломается по принципу, аналогичному тем, по которым снимаются все упаковщики exe (PE) файлов. В любом случае есть способ получить оригинальный IL код. Либо простым дампом, либо написав программку-распаковщик. Единственное, что может сделать защита — затруднить анализ и снятие дампа.
  • 0
    Вот, попробовал NetObf
    Работает.
  • 0
    На самом деле акценты на control flow не стоит ставить. У нормальных декомпиляторов в средствах оптимизации кода (а декомпилятор сначала получает raw-вариант кода, со всеми goto, после которого его оптимизирует уже) существуют и средства по опознанию control flow обфускации, а так как набор трюков подобного рода запутывания не так уж велик — это средство не стоит воспринимать как серьезное. ДА и главной проблемой опять же является совершенно простой способ получения работоспособной сборки с выключенной (или удаленной) защитой или проверкой лицензии — ILDASM/ILASM roundtrip — дизассемблировал, почистил IL-код, собрал, если надо — подписал уже своим ключем. И даже атрибут, защищающий сборку от загрузки в ILDASM — это опять же дело нескольких секунд.
    Из всех перечисленных обфускаторов защитой от ILDASM/ILASM снабжен только Spices.Net Obfuscator и, частично, Dot.fuscator (но это доп.модуль ориентированный на защиту от корпоративных краж).
    И кстати о рекомендациях — стоит процедуру проверки лицензии делать отложенной. То есть лучше будет если она запускаться будет через секунд 30, а то и больше. При загрузке приложения поставить на таймер запуск подобной процедуры — самое просто решение.

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.