Малварь как искусство Простой движок мутирования исполняемого файла


X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 085
Репутация
8 207
Решил написать простенький движок, вообще потратил времени час, просто прицепил наработки от Зомбы, планирую добавить это в криптор...)))

Пермутация - Это замена текущего кода, другим, но котоый делает те-же действия:

Смысл такой, вот есть у вас набор инструкций (Сложение, вычитание, деление, умножение и т.д.), эти инструкции можно использовать по разному, т.е. будет разный код, но действие одинаковое.

Для чего обычно используется преобразование кода?

Для сокрытия важных частей алгоритма, для затруднения взлома и сигнатурного анализа.

Глупо было бы думать, что этим трюком пользуются только легальные корпорации и фирмы.

Разработчики вредоносного программного обеспечения прочно забронировали себе места в топе подобных достижений.

Только используются они для сокрытия и затруднения анализа вирусов.

Пример мутации кода:

Вот исходные инструкции:
;------------------------------------------------------------------------------;
mov eax,12345678
add ecx,333
;------------------------------------------------------------------------------;


После процесса пермутации они станут примерно такими:

;------------------------------------------------------------------------------;
mov eax,1
add eax,12345677
sub ecx,-333
;------------------------------------------------------------------------------;

Таким образом, сигнатурное детектирование становится практически невозможным.

А после многоразового преобразования – и эмуляция тоже, поскольку этот процесс забирает значительно больше процессорного времени, чем прямое исполнение.

Увеличение объема эмулируемого(или трассируемого) кода ставит антивирус или взломщика в неудобное положение, поскольку ограничение антивируса - это глубина эмуляции, а ограничение взломщика - время трассировки.

Что делает данный движок ?

Считывает исполняемый файл в память (максимальный размер файла может-быть 50 мегабайт), далее получает указатель на секцию данных исполняемого файла, скармливает эти данные в движок от Зомбы (29А).

Что делает дижок от Зомбы ?

Смотрит опкоды дата секции, если они известны движку, то заменяет их оригиналами, пример кода:

Код:
if (inBuf[i] == 0x55)
        if (inBuf[i + 1] == 0x8B)
            if (inBuf[i + 2] == 0xEC)     
                if (inBuf[i + 3] == 0x83) // add esp, -x          
                    if (inBuf[i + 4] == 0xC4)
                        if (((char)inBuf[i + 5] <= 0) && (inBuf[i + 5] != 0x80)) // -128 sux          
                            if (rand() % 2 || MutAll)                      
                            {                      

                                inBuf[i] = 0xC8;
                                inBuf[i + 1] = -inBuf[i + 5];
                                inBuf[i + 2] = 0;     
                                inBuf[i + 3] = 0;                            
                                inBuf[i + 4] = 0x90;
                                inBuf[i + 5] = 0x90;                             
                                ++MutationCount;
                            }


Как работать с движком:

1)Движок собран в Visual Studio 2017, но если вы нехотите собирать, то в папке Release\simple_mutate_pe.exe уже есть готовый бинарник simple_mutate_pe.exe.

2)Запустить start.cmd.

3)В консоле ввести simple_mutate_pe.exe <path_to_image>

Где <path_to_image> - Имя исполняемого файла, который нужно мутировать.

Если все прошло хорошо, то в текущем каталоге появится мутированный файл с приставкой Mutated_***

Файл должен обязательно находится в текущем каталоге движка, прямые пути не работают.

В папке Release примеры оригинального Putty и Mutated_Putty.

Подводные камни:

1)Неоттестировано, т.к. написано было буквально за час.

2)Неработает с .NET и прочее.

3)Работает только с x86 PE файлами.

Ссылка на гитхаб:
 

HopefuLXakir

Уважаемый пользователь
Форумчанин
Регистрация
14.11.2018
Сообщения
82
Репутация
9
Решил написать простенький движок, вообще потратил времени час, просто прицепил наработки от Зомбы, планирую добавить это в криптор...)))

Пермутация - Это замена текущего кода, другим, но котоый делает те-же действия:

Смысл такой, вот есть у вас набор инструкций (Сложение, вычитание, деление, умножение и т.д.), эти инструкции можно использовать по разному, т.е. будет разный код, но действие одинаковое.

Для чего обычно используется преобразование кода?

Для сокрытия важных частей алгоритма, для затруднения взлома и сигнатурного анализа.

Глупо было бы думать, что этим трюком пользуются только легальные корпорации и фирмы.

Разработчики вредоносного программного обеспечения прочно забронировали себе места в топе подобных достижений.

Только используются они для сокрытия и затруднения анализа вирусов.

Пример мутации кода:

Вот исходные инструкции:
;------------------------------------------------------------------------------;
mov eax,12345678
add ecx,333
;------------------------------------------------------------------------------;


После процесса пермутации они станут примерно такими:

;------------------------------------------------------------------------------;
mov eax,1
add eax,12345677
sub ecx,-333
;------------------------------------------------------------------------------;

Таким образом, сигнатурное детектирование становится практически невозможным.

А после многоразового преобразования – и эмуляция тоже, поскольку
этот процесс забирает значительно больше процессорного времени, чем
прямое исполнение.

Увеличение объема эмулируемого(или трассируемого) кода ставит
антивирус или взломщика в неудобное положение, поскольку ограничение
антивируса - это глубина эмуляции, а ограничение взломщика - время
трассировки.

Что делает данный движок ?

Считывает исполняемый файл в память (максимальный размер файла
может-быть 50 мегабайт), далее получает указатель на секцию данных
исполняемого файла, скармливает эти данные в движок от Зомбы (29А).

Что делает дижок от Зомбы ?

Смотрит опкоды дата секции, если он известны движку, то заменяет их оригиналами, пример кода:

Код:
if (inBuf[i] == 0x55)
        if (inBuf[i + 1] == 0x8B)
            if (inBuf[i + 2] == 0xEC)     
                if (inBuf[i + 3] == 0x83) // add esp, -x          
                    if (inBuf[i + 4] == 0xC4)
                        if (((char)inBuf[i + 5] <= 0) && (inBuf[i + 5] != 0x80)) // -128 sux          
                            if (rand() % 2 || MutAll)                      
                            {                      

                                inBuf[i] = 0xC8;
                                inBuf[i + 1] = -inBuf[i + 5];
                                inBuf[i + 2] = 0;     
                                inBuf[i + 3] = 0;                            
                                inBuf[i + 4] = 0x90;
                                inBuf[i + 5] = 0x90;                             
                                ++MutationCount;
                            }


Как работать с движком:

1)Движок собран в Visual Studio 2017, но если вы нехотите собирать, то в папке Release\simple_mutate_pe.exe уже есть готовый бинарник simple_mutate_pe.exe.

2)Запустить start.cmd.

3)В консоле ввести simple_mutate_pe.exe <path_to_image>

Где <path_to_image> - Имя исполняемого файла, который нужно мутировать.

Если все прошло хорошо, то в текущем каталоге появится мутированный файл с приставкой Mutated_***

Файл должен обязательно находится в текущем каталоге движка, прямые пути не работают.

В папке Release примеры оригинального Putty и Mutated_Putty.

Подводные камни:

1)Неоттестировано, т.к. написано было буквально за час.

2)Неработает с .NET и прочее.

3)Работает только с x86 PE файлами.

Ссылка на гитхаб:
Простите за возможно тупой вопрос но этот движек от движка зомбы не чем не отличаеться? Просто позволяет движку зомбы работать с более новыми pe файлами?
 

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 085
Репутация
8 207
Простите за возможно тупой вопрос но этот движек от движка зомбы не чем не отличаеться? Просто позволяет движку зомбы работать с более новыми pe файлами?
Движку Зомбы пливать какой PE, он про него ничего не знает.)))

Он работает с бинарными данными, т.е. ты подаешь ему бинарный код, на выходе получаешь мутированный.

Всё остальное уже дело десятое...)
 

Edith Wooten

Уважаемый пользователь
Форумчанин
Регистрация
17.04.2019
Сообщения
108
Репутация
22
Движку Зомбы пливать какой PE, он про него ничего не знает.)))

Он работает с бинарными данными, т.е. ты подаешь ему бинарный код, на выходе получаешь мутированный.

Всё остальное уже дело десятое...)
так а в чем отличие от Polychaos?
 

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 085
Репутация
8 207
так а в чем отличие от Polychaos?
Тут нет либы, для работы с PE, это первое (Просто работа с бинарными данными в си).
А второе полихаус навороченный, а здесь только мутация и всё...
 

Edith Wooten

Уважаемый пользователь
Форумчанин
Регистрация
17.04.2019
Сообщения
108
Репутация
22
Тут нет либы, для работы с PE, это первое (Просто работа с бинарными данными в си).
А второе полихаус навороченный, а здесь только мутация и всё...
надо было просто формат пофиксить
 

HopefuLXakir

Уважаемый пользователь
Форумчанин
Регистрация
14.11.2018
Сообщения
82
Репутация
9
Тут нет либы, для работы с PE, это первое (Просто работа с бинарными данными в си).
А второе полихаус навороченный, а здесь только мутация и всё...
Прошу прощения а что мешает просто скармливать полихаусу бинарные данные без урезания его функционала?
 

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 085
Репутация
8 207
Прошу прощения а что мешает просто скармливать полихаусу бинарные данные без урезания его функционала?
У меня так и неполучилось мутировать ничего кроме его самого, а в других средах отличных от 2013 даже сам себя мутировать неможет.

Возможно это связано с оптимизацией компилятора, а может с чем-то ещё.

Этот движок работает, по крайне мере на Putty проверил.
 

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 085
Репутация
8 207
На 2017 вижуалке собрал.)
 

Edith Wooten

Уважаемый пользователь
Форумчанин
Регистрация
17.04.2019
Сообщения
108
Репутация
22
У меня так и неполучилось мутировать ничего кроме его самого, а в других средах отличных от 2013 даже сам себя мутировать неможет.

Возможно это связано с оптимизацией компилятора, а может с чем-то ещё.

Этот движок работает, по крайне мере на Putty проверил.
это связано с исключением в коде.
 
Верх Низ