Введение

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

Что такое внедрение DLL?

Внедрение DLL — это распространенный метод, используемый авторами вредоносных программ для выполнения своего вредоносного кода в контексте легитимного процесса. Внедряя DLL в уже запущенный процесс, вредоносная программа может получить тот же уровень доступа и привилегий, что и сам процесс.

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

Внедрение DLL может выполняться различными способами, в том числе вручную путем изменения памяти процесса, с использованием сторонних программных инструментов или с помощью языка сценариев, такого как PowerShell.

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

Авторы вредоносных программ используют различные методы для внедрения DLL в процесс, в том числе:

  1. Удаление процесса: вредоносное ПО создает новый процесс в приостановленном состоянии, заменяет его память собственным кодом и возобновляет процесс с внедренным кодом.
  2. Перехват потока: вредоносное ПО захватывает поток легитимного процесса и заменяет его стек кодом внедренной DLL.
  3. 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.