|
В новой версии 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(roundtrip –ILDASM-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. Но искажение этой информации не влияет на корректность выполнения кода. Автор:
Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript
Источник: http://www.vbnet.ru/
|