developing of native code obfuscator - Евгений Кулик
Post on 12-Jan-2017
201 Views
Preview:
TRANSCRIPT
Developing of native code obfuscator
1. Сферы применения бинарных
обфускаторов
2. Алгоритм работы обфускатора.
3. Переносимость на разные 3. Переносимость на разные
платформы.
4. Трудности деобфускации.
1. Защита от реверс-инженерии.
2. Противодействие сигнатурным
анализаторам.анализаторам.
3. Сокрытие полезной нагрузки
эксплоитов.
Пример обфускации кода в протекторе Shiva
Core-packer от Hacking Team скрывает
malware от сигнатурного анализа
1. Обфускаторы исходного кода.
2. Обфускаторы промежуточного
байт-кода.байт-кода.
3. Обфускаторы ассемблерных
инструкций.
1. Реализация поли- и метаморфизма
вирусных инфекторов.
2. Навесные упаковщики.
3. Критически важные части
алгоритмов регистрации приложений.
Схема применения обфускатора
Исходный
бинарный файлДизассемблерный
движок
Ассемблерный
движок Обфусцированный
бинарный файл
Пермутация как основа обфускатора
До пермутации После пермутации
xor eax,eax
mov eax,12345678
xor eax,eax
nop
add eax,12345678
nop
Шаблоны и полиморфизм
inc eax inc %reg0inc %reg0
inc %reg0inc eax inc %reg0 inc %reg0
dec %reg0
Подстановка оригинального
значения операнда в шаблон
inc %reg0
eax
inc eaxinc %reg0
inc %reg0
dec %reg0
inc eax
inc eax
dec eax
Генерация промежуточного представления
ассемблерных инструкций
mov eax, ecx
class Instruction{
public:
std::string Prefix;
std::string Opcode;
Argument left;
Argument right;
};
Prefix Opcode Argument Argument
class Argument{
public:
std::string Constant;
std::string Register;
std::string Label;
Expression expression;
Type type;
};
Expression – что это?
class Expression{
…
public:
std::string Register1;
std::string Terminal;
[eax]
[ecx + 5]
[edx + ebx]std::string Terminal;
std::string Constant;
std::string Register2;
…
}
[edx + ebx]
[esi * 2]
mov eax, [ecx + edx]
Expression
Алгоритм работы обфускатора
Исходная
инструкция1. Морфирующие
2. Мусорные
База
шаблонов
1
2
3
ГПСЧ
Обфусцированные
инструкции
24
5
Обфускатор
Исходный код обфускатора на С++
1. Метаморфные шаблоны.
2. Мусорные шаблоны.2. Мусорные шаблоны.
3. Возможность наложения шаблонов
друг на друга - ключевая.
Чем полиморфизм отличается от
метаморфизма?
push eax
mov eax, esp
mov ecx, dword ptr[eax-4]
add ecx,10
pop eax
push ebp
mov ebp, esp
mov ecx, dword ptr[ebp -4]
add ecx,10pop eax
retn 4
add ecx,10
pop ebp
retn 4
push eaxpush 0
mov dword ptr [esp], eax
Метод «чёрного» ящика
Обфусцированный
код
Разбиение на
блокиДанные для
анализа подаются
на вход каждого
блока. блока.
Анализируются
выходные данные.
Сложность в
правильном
разбиении на
блоки.
Наличие инструментов для реверс-
инженерии под разные системы
x86 x86-64 ARM
Windows
Linux
Где используются ARM-процессоры
1. Отличие встраиваемых систем от
канонических.
2. Необходимость сборки большинства
утилит для статического и динамического утилит для статического и динамического
анализа.
3. Сложность отладки модулей ядра.
4. Отсутствие портирования под arm
некоторых утилит.
top related