Как защитить?

Тема в разделе ".NET", создана пользователем artcosmic, 1 фев 2013.

Статус темы:
Закрыта.
  1. artcosmic

    artcosmic

    Регистр.:
    16 сен 2008
    Сообщения:
    198
    Симпатии:
    161
    Кто какие решения юзает для качественной защиты .NET сборок от реверса?
    В последнее время вообще ничего адекватного не нахожу - все вскрывается на ура бездарями-школьниками при помощи готового софта.
    Готов даже потратить много денег на надежное, проверенное решение.
     
  2. noonesshadow

    noonesshadow Писатель

    Регистр.:
    31 авг 2012
    Сообщения:
    4
    Симпатии:
    0
    SmartAssembly последних версий неплоха
     
  3. artcosmic

    artcosmic

    Регистр.:
    16 сен 2008
    Сообщения:
    198
    Симпатии:
    161
    Это просто обфускатор?
    Я вот хочу уточнить - правильно ли я понимаю, что все эти обфускаторы до одного места, если человек может править MSIL?
     
  4. noonesshadow

    noonesshadow Писатель

    Регистр.:
    31 авг 2012
    Сообщения:
    4
    Симпатии:
    0
    Обфускатор и лоадер. Распаковка не тривиальна со всеми уровнями защиты. Максимальная требует интеграцию с приложением.
     
  5. focusnick

    focusnick Постоялец

    Регистр.:
    29 июн 2012
    Сообщения:
    141
    Симпатии:
    117
    Самое надежное - написать свой обфускатор, да так, чтобы всякие de4dot'ы обламывались - я видел весьма впечатляющие поделки в этой области (не публичные), так что вполне реально.
    Если для написания своего решения нет времени\средств, то используйте бесплатный и опенсорсный Confuser последней версии - обычно под него нет автоматических деобфускаторов (т.к. автор самого популярного и самого способного деобфускатора дружит с автором Confuser'а), а те кто смогут разобраться в его коде и написать собственный распаковщик\деобфускатор - справятся и с любой другой защитой)

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

    А так, в силу природы .NET (bytecode-based) абсолютно надежно защититься не удастся.
     
    ipbfan2008 и artcosmic нравится это.
  6. artcosmic

    artcosmic

    Регистр.:
    16 сен 2008
    Сообщения:
    198
    Симпатии:
    161
    Вот недавно столкнулся с тем, что программа, защищенная Confuser, была достаточно легко вскрыта.
    Я понимаю, что написать свой обфускатор - надежнее всего, но для этого нужно знать хотя бы, с чего начать... Посоветуете инфу для самых маленьких из серии "как написать свой обфускатор"? :)
     
  7. focusnick

    focusnick Постоялец

    Регистр.:
    29 июн 2012
    Сообщения:
    141
    Симпатии:
    117
    Начните с изучения Mono.Cecil, Reflection, MSIL.
    По сути при обфускации происходит манипуляция на уровне байткода. Кто-то вообще вручную все делает (маньяки!), а кто-то Mono.Cecil использует..
    Вот пара проектов, которые его используют: Перейти по ссылке) - можно ознакомиться с использованием этой библиоетки на реальных примерах.
     
    valekor, Шумадан и artcosmic нравится это.
  8. artcosmic

    artcosmic

    Регистр.:
    16 сен 2008
    Сообщения:
    198
    Симпатии:
    161
    Ок, вот написал я свой обфускатор, хорошо. А человек открыл мою обфусцированную сборку через редактор MSIL и внес правки прямо в MSIL (он же не обфусцируется, я правильно понимаю?). Или я туплю и нет никакого редактора MSIL? Вроде тот же рефлектор позволяет редактировать MSIL напрямую...
     
  9. focusnick

    focusnick Постоялец

    Регистр.:
    29 июн 2012
    Сообщения:
    141
    Симпатии:
    117
    1. Основной смысл обфускации - потереть имена методов, переменных, классов, неймспейсов и т.д., заменив их на какую-нибудь ерунду, что уже значительно затрудняет реверс кода. И это единственное возможное необратимое действие - восстановить оригинальне имена в автоматическом режиме уже не получится, только если вручную, по смыслу, во время подробного анализа и реверса исходника.

    2. При обфускации можно соершать куда более веселые действия, чем просто переименование - можно запутывать сам байткод (MSIL), красть байты и т.д. Чтобы это обратить, реверсеру придется в подробностях изучить как именно вы запутываете и крадете байткод, то есть просто редактированием MSIL тут не обойтись - придется писать утилиту, которая будет восстанавливать байткод в автоматическом режиме.
    Аналогично со строковыми константами - их можно шифровать и оборачивать в вызов своего метода-расшифровщика, тут тоже придется писать утилиту для автоматического патчинга байткода - чтобы она ползала по сборке, искала вызов этого метода-расшифровщика и заменяла его на уже расшифрованную строку (причем для расшифровки можно этот метод и вызывать). То есть опять же, просто правкой MSIL не обойтись - надо тратить время на написание автоматической утилиты.

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

    4. Редакторов MSIL множество, и да , они позволяют вмешиваться в код сборки, но как я уже выше написал, порой просто редактора недостаточно, нужно сперва почистить сборку от обфускации, а потом уже патчить программу с помощью редактора.
     
    ipbfan2008 и artcosmic нравится это.
  10. artcosmic

    artcosmic

    Регистр.:
    16 сен 2008
    Сообщения:
    198
    Симпатии:
    161
    Ок, допустим "хакер" деобфусцировал приложение и получил доступ к моему исходному коду. Понятно, что функции и переменные будут называться не так, как я их называл, а будут, например, называться var1, var2, var3, function1, function2, function3. А вот к строкам, которые были мной прописаны в программе, "хакер" получит доступ? Например, я прописал в коде какие-то пароли доступа куда-то, какие-то строковые константы и т.д. Увидит ли он их так, как я их прописал в исходном коде?
     
Статус темы:
Закрыта.