developing of native code obfuscator - Евгений Кулик
TRANSCRIPT
![Page 1: Developing of native code obfuscator - Евгений Кулик](https://reader034.vdocuments.site/reader034/viewer/2022042605/5876f8e51a28abf3398b5d3d/html5/thumbnails/1.jpg)
Developing of native code obfuscator
![Page 2: Developing of native code obfuscator - Евгений Кулик](https://reader034.vdocuments.site/reader034/viewer/2022042605/5876f8e51a28abf3398b5d3d/html5/thumbnails/2.jpg)
1. Сферы применения бинарных
обфускаторов
2. Алгоритм работы обфускатора.
3. Переносимость на разные 3. Переносимость на разные
платформы.
4. Трудности деобфускации.
![Page 3: Developing of native code obfuscator - Евгений Кулик](https://reader034.vdocuments.site/reader034/viewer/2022042605/5876f8e51a28abf3398b5d3d/html5/thumbnails/3.jpg)
1. Защита от реверс-инженерии.
2. Противодействие сигнатурным
анализаторам.анализаторам.
3. Сокрытие полезной нагрузки
эксплоитов.
![Page 4: Developing of native code obfuscator - Евгений Кулик](https://reader034.vdocuments.site/reader034/viewer/2022042605/5876f8e51a28abf3398b5d3d/html5/thumbnails/4.jpg)
Пример обфускации кода в протекторе Shiva
![Page 5: Developing of native code obfuscator - Евгений Кулик](https://reader034.vdocuments.site/reader034/viewer/2022042605/5876f8e51a28abf3398b5d3d/html5/thumbnails/5.jpg)
Core-packer от Hacking Team скрывает
malware от сигнатурного анализа
![Page 6: Developing of native code obfuscator - Евгений Кулик](https://reader034.vdocuments.site/reader034/viewer/2022042605/5876f8e51a28abf3398b5d3d/html5/thumbnails/6.jpg)
1. Обфускаторы исходного кода.
2. Обфускаторы промежуточного
байт-кода.байт-кода.
3. Обфускаторы ассемблерных
инструкций.
![Page 7: Developing of native code obfuscator - Евгений Кулик](https://reader034.vdocuments.site/reader034/viewer/2022042605/5876f8e51a28abf3398b5d3d/html5/thumbnails/7.jpg)
1. Реализация поли- и метаморфизма
вирусных инфекторов.
2. Навесные упаковщики.
3. Критически важные части
алгоритмов регистрации приложений.
![Page 8: Developing of native code obfuscator - Евгений Кулик](https://reader034.vdocuments.site/reader034/viewer/2022042605/5876f8e51a28abf3398b5d3d/html5/thumbnails/8.jpg)
Схема применения обфускатора
Исходный
бинарный файлДизассемблерный
движок
Ассемблерный
движок Обфусцированный
бинарный файл
![Page 9: Developing of native code obfuscator - Евгений Кулик](https://reader034.vdocuments.site/reader034/viewer/2022042605/5876f8e51a28abf3398b5d3d/html5/thumbnails/9.jpg)
Пермутация как основа обфускатора
До пермутации После пермутации
xor eax,eax
mov eax,12345678
xor eax,eax
nop
add eax,12345678
nop
![Page 10: Developing of native code obfuscator - Евгений Кулик](https://reader034.vdocuments.site/reader034/viewer/2022042605/5876f8e51a28abf3398b5d3d/html5/thumbnails/10.jpg)
Шаблоны и полиморфизм
inc eax inc %reg0inc %reg0
inc %reg0inc eax inc %reg0 inc %reg0
dec %reg0
![Page 11: Developing of native code obfuscator - Евгений Кулик](https://reader034.vdocuments.site/reader034/viewer/2022042605/5876f8e51a28abf3398b5d3d/html5/thumbnails/11.jpg)
Подстановка оригинального
значения операнда в шаблон
inc %reg0
eax
inc eaxinc %reg0
inc %reg0
dec %reg0
inc eax
inc eax
dec eax
![Page 12: Developing of native code obfuscator - Евгений Кулик](https://reader034.vdocuments.site/reader034/viewer/2022042605/5876f8e51a28abf3398b5d3d/html5/thumbnails/12.jpg)
Генерация промежуточного представления
ассемблерных инструкций
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;
};
![Page 13: Developing of native code obfuscator - Евгений Кулик](https://reader034.vdocuments.site/reader034/viewer/2022042605/5876f8e51a28abf3398b5d3d/html5/thumbnails/13.jpg)
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
![Page 14: Developing of native code obfuscator - Евгений Кулик](https://reader034.vdocuments.site/reader034/viewer/2022042605/5876f8e51a28abf3398b5d3d/html5/thumbnails/14.jpg)
Алгоритм работы обфускатора
Исходная
инструкция1. Морфирующие
2. Мусорные
База
шаблонов
1
2
3
ГПСЧ
Обфусцированные
инструкции
24
5
Обфускатор
Исходный код обфускатора на С++
![Page 15: Developing of native code obfuscator - Евгений Кулик](https://reader034.vdocuments.site/reader034/viewer/2022042605/5876f8e51a28abf3398b5d3d/html5/thumbnails/15.jpg)
1. Метаморфные шаблоны.
2. Мусорные шаблоны.2. Мусорные шаблоны.
3. Возможность наложения шаблонов
друг на друга - ключевая.
![Page 16: Developing of native code obfuscator - Евгений Кулик](https://reader034.vdocuments.site/reader034/viewer/2022042605/5876f8e51a28abf3398b5d3d/html5/thumbnails/16.jpg)
Чем полиморфизм отличается от
метаморфизма?
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
![Page 17: Developing of native code obfuscator - Евгений Кулик](https://reader034.vdocuments.site/reader034/viewer/2022042605/5876f8e51a28abf3398b5d3d/html5/thumbnails/17.jpg)
Метод «чёрного» ящика
Обфусцированный
код
Разбиение на
блокиДанные для
анализа подаются
на вход каждого
блока. блока.
Анализируются
выходные данные.
Сложность в
правильном
разбиении на
блоки.
![Page 18: Developing of native code obfuscator - Евгений Кулик](https://reader034.vdocuments.site/reader034/viewer/2022042605/5876f8e51a28abf3398b5d3d/html5/thumbnails/18.jpg)
Наличие инструментов для реверс-
инженерии под разные системы
x86 x86-64 ARM
Windows
Linux
![Page 19: Developing of native code obfuscator - Евгений Кулик](https://reader034.vdocuments.site/reader034/viewer/2022042605/5876f8e51a28abf3398b5d3d/html5/thumbnails/19.jpg)
Где используются ARM-процессоры
![Page 20: Developing of native code obfuscator - Евгений Кулик](https://reader034.vdocuments.site/reader034/viewer/2022042605/5876f8e51a28abf3398b5d3d/html5/thumbnails/20.jpg)
1. Отличие встраиваемых систем от
канонических.
2. Необходимость сборки большинства
утилит для статического и динамического утилит для статического и динамического
анализа.
3. Сложность отладки модулей ядра.
4. Отсутствие портирования под arm
некоторых утилит.