Введение
Добро пожаловать в мою новую статью сегодня, я покажу вам, как выполнить инъекцию DLL с помощью функции SetWindowsHookEx. Это очень странный метод, но он позволяет обойти самый известный антивирус и Защитника Windows.
Что такое внедрение DLL?
Внедрение DLL — это распространенный метод, используемый авторами вредоносных программ для выполнения своего вредоносного кода в контексте легитимного процесса. Внедряя DLL в уже запущенный процесс, вредоносная программа может получить тот же уровень доступа и привилегий, что и сам процесс.
Процесс внедрения обычно включает загрузку DLL в память целевого процесса и последующий вызов одной из ее функций изнутри процесса. После внедрения DLL она может выполнять такие задачи, как перехват системных вызовов, перехват сообщений, регистрация нажатий клавиш и многое другое.
Внедрение DLL может выполняться различными способами, в том числе вручную путем изменения памяти процесса, с использованием сторонних программных инструментов или с помощью языка сценариев, такого как PowerShell.
Внедренная DLL может выполнять различные действия, такие как кража конфиденциальных данных, регистрация нажатий клавиш, создание снимков экрана и установка дополнительных вредоносных программ. Вредоносное ПО также может подключаться к системным функциям, например тем, которые используются антивирусом или программным обеспечением безопасности, чтобы избежать обнаружения.
Авторы вредоносных программ используют различные методы для внедрения DLL в процесс, в том числе:
- Удаление процесса: вредоносное ПО создает новый процесс в приостановленном состоянии, заменяет его память собственным кодом и возобновляет процесс с внедренным кодом.
- Перехват потока: вредоносное ПО захватывает поток легитимного процесса и заменяет его стек кодом внедренной DLL.
- AppInit_DLLs: вредоносная программа изменяет ключ реестра AppInit_DLLs, чтобы загружать DLL во все процессы, которые запускаются в системе.
Чтобы защититься от вредоносных программ, внедряющих DLL, пользователи должны использовать антивирусное программное обеспечение и поддерживать его в актуальном состоянии, избегать открытия подозрительных вложений электронной почты или загрузки программного обеспечения из ненадежных источников, а также регулярно обновлять свою операционную систему и приложения с помощью последних обновлений безопасности.
Что такое SetWindowsHookEx?
SetWindowsHookEx — это функция Windows API, которая позволяет установить перехватчик или перехват для определенного общесистемного события. Перехватчики можно использовать для мониторинга и перехвата различных системных событий, таких как ввод с помощью мыши и клавиатуры, оконные сообщения и системные события, такие как выключение и запуск системы.
Функция SetWindowsHookEx устанавливает процедуру перехвата для указанного общесистемного события и возвращает дескриптор этой процедуры. Процедура-перехватчик может быть указана либо как указатель на функцию внутри вызывающего процесса, либо как указатель на функцию внутри DLL. Процедура-перехват вызывается каждый раз, когда происходит системное событие, предоставляя разработчику возможность предпринять какие-либо действия или выполнить некоторую обработку.
Функция SetWindowsHookEx принимает четыре параметра:
- idHook: тип устанавливаемого перехватчика, например перехватчик клавиатуры, мыши или системных сообщений.
- lpfn: указатель на процедуру-перехватчик. Это может быть либо указатель на функцию, либо дескриптор модуля DLL, содержащей процедуру перехвата.
- hmod: Дескриптор DLL, содержащей процедуру перехвата.
- dwThreadId: идентификатор потока, с которым должна быть связана процедура-перехватчик. Если этот параметр равен нулю, процедура перехвата связана со всеми существующими потоками на том же рабочем столе, что и вызывающий поток.
Важно отметить, что использование функции SetWindowsHookEx для установки перехватчика требует повышенных привилегий и потенциально может представлять угрозу безопасности. Поэтому его следует использовать с осторожностью и только в законных целях.
Код
Main.cpp
#include <windows.h> #include <cstdio> typedef int (__cdecl *MeowProc)(); int main(void) { HINSTANCE meowDll; MeowProc meowFunc; // load evil DLL meowDll = LoadLibrary(TEXT("evil.dll")); // get the address of exported function from evil DLL meowFunc = (MeowProc) GetProcAddress(meowDll, "Meow"); // install the hook - using the WH_KEYBOARD action HHOOK hook = SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)meowFunc, meowDll, 0); Sleep(5*1000); UnhookWindowsHookEx(hook); return 0; }
Этот код загружает вредоносную DLL с именем «evil.dll» и устанавливает процедуру перехвата для событий клавиатуры в операционной системе Windows. Вот краткое объяснение каждой строки кода:
- #include ‹windows.h› и #include ‹cstdio›: это директивы препроцессора, позволяющие включать необходимые файлы заголовков для функций Windows API и стандартных операций ввода/вывода.
- typedef int (__cdecl *MeowProc)(): эта строка определяет тип указателя функции «MeowProc», который указывает на функцию с типом возвращаемого значения «int» и без параметров.
- ПОДСКАЗКА meowDll; и MeowProc meowFunc;: эти строки объявляют переменные для хранения дескриптора загруженной DLL и указателя на экспортированную функцию «Meow» соответственно.
- meowDll = LoadLibrary(TEXT("evil.dll"));: эта строка загружает DLL с именем «evil.dll» в адресное пространство текущего процесса и возвращает дескриптор загруженного модуля. Макрос TEXT используется для обеспечения совместимости с Unicode при вызове функции.
- meowFunc = (MeowProc) GetProcAddress(meowDll, «Meow»);: Эта строка извлекает адрес экспортированной функции «Meow» из загруженной DLL и присваивает его указателю «meowFunc».
- HHOOKook = SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)meowFunc, meowDll, 0);: Эта строка устанавливает процедуру перехвата для событий клавиатуры с использованием функции «SetWindowsHookEx». Константа «WH_KEYBOARD» указывает, что процедура перехвата будет запускаться для событий клавиатуры. Указатель «meowFunc» приводится к типу «HOOKPROC» перед передачей его в качестве параметра процедуры-перехватчика. Дескриптор «meowDll» также передается функции в качестве параметра дескриптора модуля.
- Sleep(5*1000);: эта строка приостанавливает выполнение программы на 5 секунд (5000 миллисекунд), чтобы позволить процедуре перехвата перехватывать события клавиатуры.
- UnhookWindowsHookEx(hook);: эта строка удаляет ранее установленную процедуру перехвата с помощью функции «UnhookWindowsHookEx». Переменная «hook» хранит дескриптор, возвращаемый функцией «SetWindowsHookEx».
Evil.dll
#include <windows.h> #pragma comment (lib, "user32.lib") BOOL APIENTRY DllMain(HMODULE hModule, DWORD nReason, LPVOID lpReserved) { switch (nReason) { case DLL_PROCESS_ATTACH: break; case DLL_PROCESS_DETACH: break; case DLL_THREAD_ATTACH: break; case DLL_THREAD_DETACH: break; } return TRUE; } extern "C" __declspec(dllexport) int Meow() { MessageBox( NULL, "Hacked by S12", "S12", MB_OK ); return 0; }
Этот код определяет Windows DLL (библиотеку динамической компоновки), которая при загрузке программой отображает на экране окно сообщения с текстом «Взломан S12». Вот краткое объяснение каждой строки кода:
- #include ‹windows.h›: это директива препроцессора для включения необходимых файлов заголовков для функций Windows API.
- Комментарий #pragma (lib, «user32.lib»): эта строка указывает компоновщику связать библиотеку «user32.lib», которая содержит функцию MessageBox, используемую позже в коде.
- BOOL APIENTRY DllMain(HMODULE hModule, DWORD nReason, LPVOID lpReserved): эта функция является точкой входа для DLL и вызывается системой, когда DLL загружается или выгружается процессом. Он принимает три параметра: дескриптор модуля DLL, код причины, указывающий, почему вызывается функция, и указатель на зарезервированную область. В этом коде функция просто возвращает TRUE и больше ничего не делает.
- extern «C» __declspec(dllexport) int Meow(): эта строка объявляет функцию с именем «Meow», которая будет экспортироваться DLL и может быть вызвана из другой программы. Ключевое слово extern указывает, что функция определена в другом модуле, а атрибут __declspec(dllexport) экспортирует функцию из DLL. Функция возвращает целое значение 0.
- MessageBox(NULL, «Hacked by S12», «S12», MB_OK): эта строка отображает на экране окно сообщения с заголовком «S12» и сообщением «Hacked by S12» при вызове функции «Meow». Функция MessageBox принимает четыре параметра: дескриптор окна владельца (в данном случае NULL для отсутствия окна владельца), отображаемое текстовое сообщение, заголовок окна сообщения и набор флагов, определяющих внешний вид и поведение окна сообщения. окно сообщения. Флаг «MB_OK» указывает, что в окне сообщения есть только кнопка «ОК».
Таким образом, этот код определяет библиотеку Windows DLL, которая экспортирует функцию с именем «Meow», которая при вызове отображает окно сообщения с текстом «Hacked by S12». Цель кода, скорее всего, продемонстрировать, как вредоносная DLL может использоваться для отображения несанкционированных сообщений или выполнения других вредоносных действий при загрузке программой.
POC
Давайте выполним это:
И когда я ввожу значение клавиатуры:
Выводы
Это все, что касается этой вредоносной техники, я надеюсь, что она вам понравится и вы попытаетесь использовать и выполнить ее на своем компьютере.
Если вам нравится мой контент и вы хотите помочь мне вывести этот проект на новый уровень, вы можете стать участником, пожертвовав ежемесячную подписку. Ваша поддержка поможет мне продолжать создавать качественный контент. Благодарим вас за щедрость!
Если в настоящее время для вас нет возможности сделать пожертвование, не проблема! Я очень ценю вашу поддержку в распространении моего проекта и распространении информации. Несмотря на это, я продолжу создавать и делиться своими работами, и я благодарен за вашу поддержку и интерес.
Если вы хотите поддержать меня, вы можете проверить мой дополнительный профиль на Medium и просмотреть все статьи! Следуйте и поддержите его!. Это ссылка:
Это YouTube-канал моей команды разработчиков вредоносного ПО, нам нужна ваша подписка и ваша поддержка.
Спасибо, что прочитали это :)
S12.