Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Как написать Инжектор с нуля на C++
Как написать Инжектор с нуля на C++
В данной статье я вам расскажу и покажу как работает инжектор dll и как написать инжектор с нуля с методом LoadLibrary, я вам расскажу о каждом методе и последовательно как и что происходит, для новичков будет особенно полезная статья потому-что в интернете мало где можно найти написание инжектора с нуля на языке C++ давайте начнем
Что такое Инжектор? - это метод используемый для запуска кода в адресном пространстве другого процесса, заставляя его загружать библиотеку динамической компоновки
Соответственно для инжектора нам нужна динамическая библиотека которая будет выполнять код в адресном пространстве который мы освободим и создадим поток!
Давайте начнем писать сам инжектор, а с динамической библиотекой вы уже сами разберетесь или можете найти на форуме
Для начало нам нужно подключить несколько инклудов
#include <Windows.h>
#include <TlHelp32.h>
Нам нужна будет функция с помощью которой мы будем получать PID процесса, при открытий программ он генерируется всегда рандомно
Поэтому нам нужно получить его что бы на основе его открыть ручку процесса и предоставить нам полный доступ к процессу в User Mode
Теперь давайте в нашем main() найдем процесс нужной нам игры куда будем внедрять, откроем дескриптор процесса (получаем полный доступ) и освободим память и создадим наш поток адресного пространства
Что такое Инжектор? - это метод используемый для запуска кода в адресном пространстве другого процесса, заставляя его загружать библиотеку динамической компоновки
Соответственно для инжектора нам нужна динамическая библиотека которая будет выполнять код в адресном пространстве который мы освободим и создадим поток!
Давайте начнем писать сам инжектор, а с динамической библиотекой вы уже сами разберетесь или можете найти на форуме
Для начало нам нужно подключить несколько инклудов
#include <Windows.h>
#include <TlHelp32.h>
Нам нужна будет функция с помощью которой мы будем получать PID процесса, при открытий программ он генерируется всегда рандомно
Поэтому нам нужно получить его что бы на основе его открыть ручку процесса и предоставить нам полный доступ к процессу в User Mode
C++:
DWORD GetProcessID(const char* processName)
{
if (!processName)
return 0;
DWORD id = 0;
HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnap)
{
PROCESSENTRY32 pe32 = { sizeof(PROCESSENTRY32) };
if (Process32First(hSnap, &pe32))
{
while (Process32Next(hSnap, &pe32))
{
if (strcmp(processName, pe32.szExeFile) == 0)
{
id = pe32.th32ProcessID;
break;
}
}
}
}CloseHandle(hSnap);
return id;
}
Теперь давайте в нашем main() найдем процесс нужной нам игры куда будем внедрять, откроем дескриптор процесса (получаем полный доступ) и освободим память и создадим наш поток адресного пространства
C++:
int main() {
DWORD gameProcess = 0; // Создаем переменную под наш GetProcessID метод
const char* DllPath = "name.dll"; // Наша DLL которую инжектим, в данном случае он найдет рядом с инжектором (только)
gameProcess = GetProcessID("csgo.exe");
if (!gameProcess) { // Если наш процесс не был найден
printf("Process csgo was not found");
}
// Если процесс найден открываем ручку
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, gameProcess);
if (hProcess == INVALID_HANDLE_VALUE) {
// Если нашу ручку не удалось открыть
printf("Handle Error");
}
void* allocated = VirtualAllocEx(hProcess, 0, MAX_PATH, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE); // Освобождаем память под нашу DLL
if (!WriteProcessMemory(hProcess, allocated, DllPath, strlen(DllPath) + '\0', 0)) // Записываем нашу DLL и проверяем что если неудалось записать
{
CloseHandle(hProcess);
return false;
}
void* hThread = CreateRemoteThread(hProcess, 0, 0, (PTHREAD_START_ROUTINE)LoadLibraryA, allocated, 0, 0); // Создаем поток адресса которого мы освободили это наша DLL
if (hThread != 0) // закрываем Handle
CloseHandle(hThread);
CloseHandle(hProcess); // Закрываем Handle Process
printf("Inject Successfulled"); // Инжект произошел успешно
return 0; // Возвращаем 0
}
Последнее редактирование: