Уроки Разработка вирусов-23. Контроль выполнения полезной нагрузки


X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 085
Репутация
8 208
1695980301266.png


В реальных сценариях важно ограничивать действия, выполняемые вредоносным ПО, и концентрироваться на основных задачах.
Чем больше действий выполняет вредоносное ПО, тем вероятнее, что его обнаружат системы мониторинга.

Вот например такая ситуация, как в этом уроке, правилом хорошего тона перед перезаписью атакуемой функции, необходимо сохранить оригинал, а потом после выполнения полезной нагрузки восстановить функцию.

Но для этого нужно знать, что полезная нагрузка выполнилась.)

Объекты синхронизации Windows могут быть использованы для управления выполнением полезной нагрузки. Эти объекты координируют доступ к общим ресурсам для нескольких потоков или процессов, обеспечивая контролируемый доступ к общим ресурсам и предотвращая конфликты или состояния гонки, когда несколько потоков или процессов пытаются одновременно получить доступ к одному и тому же ресурсу. Используя объекты синхронизации, можно контролировать, сколько раз полезная нагрузка будет выполнена на системе.

Существует несколько типов объектов синхронизации, включая семафоры, мьютексы и события. Каждый тип объекта синхронизации работает несколько иначе, но в конечном итоге все они служат одной цели - координировать доступ к общим ресурсам.

Семафоры

Семафоры - это инструменты синхронизации, которые используют значение, хранящееся в памяти, для контроля доступа к общему ресурсу. Существует два типа семафоров: бинарные и счетные.

Бинарный семафор имеет значение 1 или 0, указывая, доступен ли ресурс или недоступен соответственно. Счетный семафор, с другой стороны, имеет значение больше 1, представляя количество доступных ресурсов или количество процессов, которые могут одновременно получать доступ к ресурсу.

Для управления выполнением полезной нагрузки при каждом выполнении полезной нагрузки будет создаваться именованный объект семафора. Если двоичный файл выполняется несколько раз, первое выполнение создаст именованный семафор, и полезная нагрузка будет выполнена, как предполагалось. При последующих запусках создание семафора не удастся, так как семафор с таким же именем уже работает. Это указывает на то, что полезная нагрузка в настоящее время выполняется из предыдущего запуска и поэтому не должна выполняться снова, чтобы избежать дублирования.

CreateSemaphoreA будет использоваться для создания объекта семафора. Важно создать его как именованный семафор, чтобы предотвратить выполнение после первоначального запуска двоичного файла. Если именованный семафор уже работает, CreateSemaphoreA вернет дескриптор существующего объекта, и GetLastError вернет ERROR_ALREADY_EXISTS.

В приведенном ниже коде, если семафор "ControlString" уже работает, GetLastError вернет ERROR_ALREADY_EXISTS.

C:
HANDLE hSemaphore = CreateSemaphoreA(NULL, 10, 10, "ControlString");

if (hSemaphore != NULL && GetLastError() == ERROR_ALREADY_EXISTS)
    // Полезная нагрузка уже выполняется
else
    // Полезная нагрузка не выполняется

Мьютексы

Мьютекс, сокращенно от "взаимного исключения", - это инструмент синхронизации, используемый для управления доступом к общим ресурсам среди процессов и потоков. На практике поток, пытающийся получить доступ к общему ресурсу, проверяет статус мьютекса. Если он заблокирован, поток ждет, пока мьютекс не будет разблокирован. Если мьютекс не заблокирован, поток блокирует его, выполняет необходимые операции с общим ресурсом и затем разблокирует мьютекс по завершении. Это обеспечивает доступ к общему ресурсу только одного потока за раз, предотвращая конфликты и порчу данных.

CreateMutexA используется для создания именованного мьютекса следующим образом:

C:
HANDLE hMutex = CreateMutexA(NULL, FALSE, "ControlString");

if (hMutex != NULL && GetLastError() == ERROR_ALREADY_EXISTS)
    // Полезная нагрузка уже выполняется
else
    // Полезная нагрузка не выполняется

События

События - это еще один инструмент синхронизации, который может быть использован для координации выполнения потоков или процессов. Они могут быть ручными или автоматическими, причем ручные события требуют явных действий по установке или сбросу, а автоматические события активируются внешними условиями, такими как истечение времени таймера или завершение задачи.

Для использования событий в программе может быть использована функция WinAPI CreateEventA. Использование функции демонстрируется ниже:

C:
HANDLE hEvent = CreateEventA(NULL, FALSE, FALSE, "ControlString");

if (hEvent != NULL && GetLastError() == ERROR_ALREADY_EXISTS)
    // Полезная нагрузка уже выполняется
else
    // Полезная нагрузка не выполняется

Хочется отметить что выше код использует не совсем правильно объекты синхронизации, а призван лишь для демонстрации, для большего понимания как с ними работать, рекомендуется обратится либо к документации Microsoft, либо поискать статьи по объектам синхронизации.

Вот например семафоры, нужно использовать с событиями:WaitForSingleObject (Потоки ожидают доступа к разделяемому ресурсу).
А для работы мьютексами например обычно используют функции захвата и освобождения мьютекса.

Изучить эти темы предлагаю самостоятельно, т.к. материала очень много по этой части.)
 
Последнее редактирование:
Автор темы Похожие темы Форум Ответы Дата
X-Shar Введение в разработку вредоносных программ 1
X-Shar Введение в разработку вредоносных программ 6
X-Shar Введение в разработку вредоносных программ 0
X-Shar Введение в разработку вредоносных программ 2
X-Shar Введение в разработку вредоносных программ 0
X-Shar Введение в разработку вредоносных программ 0
X-Shar Введение в разработку вредоносных программ 0
X-Shar Введение в разработку вредоносных программ 0
X-Shar Введение в разработку вредоносных программ 0
X-Shar Введение в разработку вредоносных программ 5
X-Shar Введение в разработку вредоносных программ 1
X-Shar Введение в разработку вредоносных программ 0
X-Shar Введение в разработку вредоносных программ 0
X-Shar Введение в разработку вредоносных программ 0
X-Shar Введение в разработку вредоносных программ 2
X-Shar Введение в разработку вредоносных программ 2
X-Shar Введение в разработку вредоносных программ 0
X-Shar Введение в разработку вредоносных программ 3
X-Shar Введение в разработку вредоносных программ 2
X-Shar Введение в разработку вредоносных программ 0
Похожие темы
Уроки Разработка вирусов-35.Обход EDRs.Последняя тема цикла
Уроки Разработка вирусов-34.Обход Windows defender
Уроки Разработка вирусов-33.Уменьшение вероятности детекта зверька
Уроки Разработка вирусов-32.Открываем врата ада
Уроки Разработка вирусов-31.Обход виртуальных машин
Уроки Разработка вирусов-30.Черпаем силы в антиотладке
Уроки Разработка вирусов-29. Предельная техника-2. Практика. Реализуем техники инъекции через сисколы
Уроки Разработка вирусов-28. Предельная техника. Разборка с сисколами
Уроки Разработка вирусов-27.Кунгфу-2.Изучаем API Hooking
Уроки Разработка вирусов-26. Изучаем кунгфу-1. Скрытие таблицы импорта
Уроки Разработка вирусов-25. Скрытие строк
Уроки Разработка вирусов-24. Изучаем технику Spoofing
Уроки Разработка вирусов-22.Изучаем технику Stomping Injection
Уроки Разработка вирусов-21.Инъекция отображаемой памяти
Уроки Разработка вирусов-20.Вызов кода через функции обратного вызова
Уроки Разработка вирусов-19.Изучаем технику APC Injection
Уроки Разработка малвари-18.Определение PID нужного процесса, или перечисления процессов
Уроки Разработка вирусов-17.Изучаем технику Thread Hijacking
Уроки Разработка вирусов-16.Разборка с цифровой подписью зверька
Уроки Разработка вирусов-15. Прячем Payload в реестре
Верх Низ