Visual Basic, .NET, ASP, VBScript
 

   
 
Описание для автора не найдено
 
     
   
 

Anonymizer – еще одна специя для защиты .Net сборок.

 

В новой версии Spices.Net компания 9rays.net предлагает более эффективную и «умную» технологию защиты метаданных от дизассемблинга и декомпиляции - Anonymizer. Это следующее поколение защитных средств для .Net сборок, дающее более эффективные результаты по сравнению с технологией antiILDASM.

Эта технология сочетает такие методы защиты как обфускация кода и обфускация метаданных, давая намного более эффективные результаты по сравнению с codeflow obfuscation (т.к codeflow obfuscation базируется на применении «шаблонных» способов запутывания кода, они легко распознаются хорошими декомпиляторами), в данном случае сделать это будет труднее если вообще невозможно (разработчики предусмотрели защиту от распознавания анонимизированных участков кода).

Эта технология позволяет максимально скрыть и исказить IL-code, тем самым делая код, генерируемый декомпиляторами некорректным и невозможным для использования.

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

Anonymizer – это комплексное решение по защите сборок от дизассемблинга, декомпиляции и деобфускации.

Рассмотрим средства защиты предлагаемые технологией Anonymizer:

 

1.   Маскирование обращений к «видимым» в IL-code обращениям к внешним типам, методам и полям, анонимизацию этих обращений. (Использование опций AnonymizeOptions.ReferencedMethods и AnonymizeOptions.ReferencedFields)

Посмотрим на это со стороны IL-code, это исходный IL-code:

 

 

IL_0000: ldstr "Test1:"

IL_0005: ldarga.s

IL_0007: call instance string [mscorlib]System.Int32::ToString()

IL_000c: call string [mscorlib]System.String::Concat(string, string)

IL_0011: call void [mscorlib]System.Console::WriteLine(string)

 

 

Это результаты обработки этого кода технологией Anonymizer:

 

 

 

IL_0000: call class object smallTest.┌::2()

IL_0005: ldarga.s

IL_0007: call class object smallTest.│::│5(class object)

IL_000c: call class object smallTest.│::│2(class object, class object)

IL_0011: call void smallTest.│::│7(class object)

 

 

 

Как видите, обращения к методам Int32.ToString(), String.Concat, System.Console.WriteLine были анонимизированы.

a)   было затруднено понимание выполнения метода,

b)   выполнение метода производится в анонимизированном методе с анонимизированным списком параметров

c)   return type метода также анонимизирован и затруднительно опознать что же возвращает метод.

 

 

2.   Анонимизация внутренних обращений. (Использование опций AnonymizeOptions.InternalMethods и AnonymizeOptions.InternalFields)

 

Подобным же образом Anonymizer обрабатывает и обращение к внутренним методам и полям. Единственное различие перед предыдущим методом – здеьс в обработку попадают члены сборки, которые не были обфусцированы или исключены при помощи атрибута NineRays.Obfuscator.DontAnonymize.

NB: Это средство необходимо только для усиления защиты, возможно достаточным для применения в большинстве случае будет использование опции AnonymizeOptions.Stubs т.е скрытия тел необфусцированных членов сборки.

 

3.   Анонимизация шифрования строк. (Использование опций AnonymizeOptions.StringEncryption)

 

Технология Anonymizer имеет в своем арсенале и средство для анонимизации шифрования строк (string encryption).

String Encryption позволяет не только скрыть загрузку строк от исследователя сборки, но и зашифровать строку для того чгобы невозможно было восстановить секретную информацию из IL-кода. Некторые декомпиляторы могут опознавать код string encryption и дешифровать строку. Anonymizer позволяет максимально скрыть информацию о передаваемых параметрах и возвращаемых данных из методов дешифрации. Эти дополнительные меры затрудняют работу декомпилятора, делают генерируемый декомпилятором или полученный утитилитой ILDASM код невозможным для использования .

NB: дополнительные меры защиты препятствуют дизассемблингу сборки а также использованию листинга генерируемого ILDASM для создания копии дизаcсемблированной сборки утилитой ILASM(roundtripILDASM-ILASM).

 

4.   Установка заглушек (Использование опции AnonymizeOptions.Stubs)

 

Эта опция из арсенала технологии позволяет заместить необфусцированные методы анонимизированными методами-заглушками.

 

Рассмотрим пример:

 

 

public bool PrintMessage(string msg)

{

System.Console.WriteLine(msg);

}

 

//---- usage ------

if (PrintMessage(“Hello!”))

{

}

 

Это результаты обработки этого кода технологией Anonymizer:

 

 

//original

public bool PrintMessage(string msg)

{

0(msg);

}

 

//stub

internal void 0(object a_0)

{

System.Console.WriteLine(a_0);

}

 

//---- usage ------

if (0(s.1())//use stub and encrypted string(s.1 method)

{

}

 

Как мы видим:

a)   метод был замещен методом 0.

b)   его обращения в телах других методов – также замещены.

c)   При применении анонимизации referenced members будет анонимизировано также и тело метода 0, это позволяет избежать лишних вызовов и оптимизировать производительность сборки :

 

//original

public bool PrintMessage(string msg)

{

0(msg);

}

//stub

internal void 0(object a_0)

{

q.0(a_0);

}

 

//---- usage ------

//use stub and encrypted string(s.1 method)

if (0(s.1())

{

}

 

 

 

5.   Дополнительная информация.

a)   Средства технологии Anonymizer будут очень полезны при работе со сборками требующими минимальной обфускации, т.е содержащие большое количество публичных членов используемых в сериализации или reflection и помогут дополнительно защитить подобного рода сборки.

b)   Как дополнительное средство защиты можно использовать antiILDASM.

c)   Код производимый Anonymizer конечно же скажется на производительности исполнения кода (assembly performance, IL-code performance), т.к производятся редиректы вызовов, для избежания применения Anonуmizer на критическом коде, пользователь может пометить код, не предназначенный для анонимизации специальным атрибутом (NineRays.Obfuscator.DontAnonymize), а для отмены установки заглушек на методе специальным атрибутом (NineRays.Obfuscator.DontStub).

d)   Верификация - код производимый Anonymizer не будет проходить верификацию утилитой PEVerify, т.к искажает информацию о типах, листе параметров анонимизируемых обращений или замещаемых методов к членам сборки и referenced members. Но искажение этой информации не влияет на корректность выполнения кода.

 

 
     

   
   
     
  VBNet рекомендует