Dll injector заблокировал вас mta

Обновлено: 04.07.2024

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

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

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 = ;

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);
>


CreateToolhelp32Snapshot — возвращает нам фактически список процессов и их потоков. Обходим весь список и если найден наш процесс, то возвращаем его идентификатор или 0. Теперь, когда у нас есть идентификатор, мы можем получить доступ к процессу при помощи OpenProcess, но не сможем ни чего записать в его память. Для того, что бы наше приложение получило права, нам понадобиться следующая ф-ция:
BOOL setPrivilege(HANDLE hToken, LPCTSTR szPrivName, BOOL fEnable) TOKEN_PRIVILEGES tp;
tp.PrivilegeCount = 1;
LookupPrivilegeValue(NULL, szPrivName, &tp.Privileges[0].Luid);
tp.Privileges[0].Attributes = fEnable ? SE_PRIVILEGE_ENABLED : 0;
AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof (tp), NULL, NULL);
return ((GetLastError() == ERROR_SUCCESS));
>

Подробней о правах можете почитать здесь . Не смотря на то, что ответа за 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);


Нам не хватает указателя на ф-цию MessageBoxA, которая находиться в user32.dll:
HINSTANCE userHinstance = LoadLibrary(_T( "user32.dll" ));
injectData.MessageB = (LPMessageBox) GetProcAddress(userHinstance, "MessageBoxA" );

Ну что ж, перейдем теперь к самому интересному, собственно к инфицированию, запишем наш данный и код в память и создадим поток, который все это запустит. Для модифицирования памяти нам понадобиться две ф-ции: VirtualAllocEx и WriteProcessMemory.
LPVOID lpProc = VirtualAllocEx(processHandel, NULL, ProcSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE );
LPVOID lpParams = VirtualAllocEx(processHandel, NULL, 1024, MEM_COMMIT, PAGE_READWRITE );
DWORD dwWritten;
if (WriteProcessMemory(processHandel, lpProc, InjectionMain, ProcSize, &dwWritten ) == 0) addLogMessage( "WriteProcessMemory error" , GetLastError());
return 0;
>
if (WriteProcessMemory( processHandel, lpParams, &injectData, sizeof (injectData), &dwWritten ) == 0) addLogMessage( "WriteProcessMemory error" , GetLastError());
return 0;
>

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

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

Состояние античита на сервере контролируют 3 параметра в mtaserver.conf:

Значений у параметра разделяются запятой. Доступные коды проверки игркоа:

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

По умолчанию клиенты не могут присоединиться к серверу, если data-файлы их GTA:SA изменены. Добавление одной или более строк по образцу выше исключит файлы из списка проверяемых. Названия файлов, пригодных к использованию:

- "data/maps" представляет все файлы и папки внутри "data/maps"
- "data/handling.cfg" не учитывается, так как он игнорируется MTA в любом случае в связи со встроенным функционалом управления транспортом. Если вы хотите подгрузить собственные файлы handling.cfg, то аналогичный эффект можно достичь благодаря использованию соответствующего ресурса.</div>

Настройки для клиента

При подсоединению к серверу информация по АЧ сервера отображается в клиентской консоли (F8)
Пример:

Disabled AC: Содержит данные серверной настройки, указанные в теге <disableac>.
Enabled SD содержит данные серверной настройки, указанные в <enablesd>.
Allowed client files: Содержит номера, указывающие на файлы, разрешенные клиенту сервером для модификации. Номера отвечают за следующие файлы:


Использование модифицированных файлов

Если вы хотите использовать модифицированные data-файлы из вашей папки с установенной GTA:SA, поставьте маркер маркер в:

Settings->Multiplayer->Use customized GTA:SA files
(маркер появляется только когда у вас изменены data-файлы GTA:SA)

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


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

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

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

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 = ;

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);
>


CreateToolhelp32Snapshot — возвращает нам фактически список процессов и их потоков. Обходим весь список и если найден наш процесс, то возвращаем его идентификатор или 0. Теперь, когда у нас есть идентификатор, мы можем получить доступ к процессу при помощи OpenProcess, но не сможем ни чего записать в его память. Для того, что бы наше приложение получило права, нам понадобиться следующая ф-ция:
BOOL setPrivilege(HANDLE hToken, LPCTSTR szPrivName, BOOL fEnable) TOKEN_PRIVILEGES tp;
tp.PrivilegeCount = 1;
LookupPrivilegeValue(NULL, szPrivName, &tp.Privileges[0].Luid);
tp.Privileges[0].Attributes = fEnable ? SE_PRIVILEGE_ENABLED : 0;
AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof (tp), NULL, NULL);
return ((GetLastError() == ERROR_SUCCESS));
>

Подробней о правах можете почитать здесь . Не смотря на то, что ответа за 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);


Нам не хватает указателя на ф-цию MessageBoxA, которая находиться в user32.dll:
HINSTANCE userHinstance = LoadLibrary(_T( "user32.dll" ));
injectData.MessageB = (LPMessageBox) GetProcAddress(userHinstance, "MessageBoxA" );

Ну что ж, перейдем теперь к самому интересному, собственно к инфицированию, запишем наш данный и код в память и создадим поток, который все это запустит. Для модифицирования памяти нам понадобиться две ф-ции: VirtualAllocEx и WriteProcessMemory.
LPVOID lpProc = VirtualAllocEx(processHandel, NULL, ProcSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE );
LPVOID lpParams = VirtualAllocEx(processHandel, NULL, 1024, MEM_COMMIT, PAGE_READWRITE );
DWORD dwWritten;
if (WriteProcessMemory(processHandel, lpProc, InjectionMain, ProcSize, &dwWritten ) == 0) addLogMessage( "WriteProcessMemory error" , GetLastError());
return 0;
>
if (WriteProcessMemory( processHandel, lpParams, &injectData, sizeof (injectData), &dwWritten ) == 0) addLogMessage( "WriteProcessMemory error" , GetLastError());
return 0;
>

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

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


DLL Injector – специальная программа для внедрения модифицированных DLL-файлов в какой-либо запущенный процесс. Чаще всего функционалом подобного софта пользуются геймеры, которые хотят взломать геймплей в каком-то онлайн-проекте. Если у программы получается обойти защиту игры, то пользователь добивается результата. Например, таким способом внедряются читы для CS: GO и подобных игр. Процедура выполняется всего за несколько кликов. Чтобы скачать DLL Injector с нашего сайта, пролистайте страницу до самого конца и кликните по кнопке для загрузки.

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

Возможности

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

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

Возможности

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

Плюсы и минусы

Перейдем к положительным и отрицательным сторонам приложения, без которых не обходится любой софт.

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

Плюсы и минусы

Как пользоваться

Рассмотрим действия, которые вам придется выполнить для применения сторонних библиотек к какой-либо игре. Алгоритм никак не меняется в зависимости от игры или конкретных DLL, поэтому рассмотрим общий порядок действий:

  1. Запустите программу и подождите, пока в таблице появятся все подходящие процессы.
  2. С помощью верхней строки укажите местоположение папки с библиотеками, которые нужно установить.
  3. Теперь выберите нужный процесс из таблицы, выделив его кликом мышки. Затем нажмите кнопку

Как пользоваться

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

Видео

Процесс работы с данной утилитой подробнее разбирается в представленном видеоролике.

Ключ активации и загрузка

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

Читайте также: