Как сделать инжектор dll
Перейти к содержимому

Как сделать инжектор dll

DLL Injection

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

Алгоритм работы очень просто, нам нужно создать поток в процессе и внедрить в него выполнения нашего кода. Для примера, мы инфицируем explorer.exe и выведем сообщение об этом.

Опишем структуру, через которую мы получим необходимые нам данные:

typedef FARPROC (WINAPI *LPMessageBox)(HWND, LPCWSTR, LPCWSTR, UINT);

typedef struct _InjectData <
char title[50];
char msg[50];
LPMessageBox MessageB;
> InjectData, *PInjectData;

static DWORD WINAPI InjectionMain(LPVOID lpParams) <

PInjectData info = (PInjectData)lpParams;

info->MessageB(NULL, (LPCWSTR)info->msg, (LPCWSTR)info->title, MB_OK);
return 0;
>

В нашем примере она довольно таки проста. В нем мы не выполняем подгрузку DLL, хотя для большинства задач вам это может быть необходимо, для этого необходимо передать указатели на ф-ции LoadLibrary и GetProcAddress, также как мы это делам для MessageBoxA, и при помощи их подгружать необходимые вам DLL.

Теперь нам нужно получить доступ к explorer.exe, записать наш код, данные в адресном пространстве процесса и создать поток в процессе для выполнения нашего кода.

Опишем ф-цию которая возвращает идентификатор процесса:

DWORD getProcessID() <
DWORD processID = 0;
HANDLE snapHandle;
PROCESSENTRY32 processEntry = <0>;

if ( (snapHandle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)) == INVALID_HANDLE_VALUE ) <
return 0;
>

processEntry.dwSize = sizeof (PROCESSENTRY32);
Process32First(snapHandle, &processEntry);
do <
if ( wcscmp(processEntry.szExeFile, PROCESSNAME) == 0 ) <
return processEntry.th32ProcessID;
>
> while (Process32Next(snapHandle,&processEntry));

if ( snapHandle != INVALID_HANDLE_VALUE ) <
CloseHandle(snapHandle);
>

Подробней о правах можете почитать здесь . Не смотря на то, что ответа за 1998 год он еще актуален для XP SP3 и насколько я знаю, для Windows 7, хотя лично еще не тестил.

Теперь у нас есть все для того, что бы получить доступ к процессу:

DWORD processID = getProcessID();
HANDLE hCurrentProc = GetCurrentProcess();

if (!OpenProcessToken(hCurrentProc, TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES, &hToken)) <
addLogMessage( «OpenProcessToken Error» , GetLastError());
return 0;
> else <
if (!setPrivilege(hToken, SE_DEBUG_NAME, TRUE)) <
addLogMessage( «SetPrivlegesSE_DEBUG_NAME Error» , GetLastError());
return 0;
>
>

if (processID == 0) <
MessageBox(NULL, _T( «Process not found!» ), _T( «Error» ), MB_OK | MB_ICONERROR);
return 0;
>

processHandel = OpenProcess(PROCESS_ALL_ACCESS, false , processID);

VirtualAllocEx — предоставляет физическую память в виртуальном адресном пространстве процесса, а WriteProcessMemory записывает наши данные в память процесса.

Теперь создадим поток в процессе, который воплотит наш коварный план в жизнь:

Как Создают Инжекторы?

Часто ли вы используете инжектор для внедрения файлов? Каждый день? А вы знали что первые инжекторы DLL файлов появлялись в открытом доступе примерно в 2010 году, это больше 11 лет назад. В то время, загрузить эту программу было крайне сложно, так как их разработка только начиналась, и они были созданы в малом количестве, к тому же просто так делиться ценным скриптом никто не хотел. В наше время скачать Инжекторы можно совершенно бесплатно и без каких либо проблем, сегодня их существует огромное количество для разных игр и не только.

Что такое инжектор?
Для начала, давайте вспомним, что такое Injector? Инжектор — это не сложная программа для внедрения в запущенное приложение динамических .dll файлов, добавляя свои или изменяя готовые данные из оперативной памяти запущеного процесса. Чаще всего эта утилита используется для онлайн игр, так как для Offline развлечений изменить параметры проще. В основном с помощью инъекции, внедряют разные читы.

catpiza/injector

Простенький инъектор .dll, созданный как альтернатива для GameOwner. Использует метод LoadLibrary.

  1. Скачать injector.exe
  2. Распаковать в любую папку (желательно на флешку)
  3. Перенести вашу .dll в папку с инъектором
  4. Запустить инъектор и ввести название .dll
  5. Profit

Для компиляции кода нужен любой компилятор C++/C (например, GNU GCC Compiler). Копируете injector.cpp и компилируете, полная копи-паста компатибилити чо.

В случае если Вы будете компилировать на чистом Си, нужно будет добавить в самое начало:

В сурс коде я прописал все как можно подробнее, все должно быть понятно.

Например, чтобы код инъекции работал не только в hl2.exe, а в любом, то можно написать следующий код:

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *