Pull to refresh

Обзор обфускаторов для .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. Да, он ничем не лучше существующих, но есть одно но — принцип обфускации не объявлен публично, пощупать его нельщя. Чтобы его взломать, надо просто потратить больше времени.
Как говорится, думайте сами, решайте сами…
Tags: .NETobfuscatorобфускаторобзор
Hubs: .NET
Total votes 83: ↑65 and ↓18 +47
Comments 72
Comments Comments 72

Popular right now