-
Автор темы
- #1
Сделал сначала просто лоадер, сейчас решил его разделить на инжект(1) и выгрузку(2). Сделал через switch case, но чет хуета какая-то. Оно и не инжектит, и не выгружает. Вроде бы до последней строки вывода текста при инжекте доходит, а чита в игре нет 0_0. Буду благодарен за помощь! Код ниже!
C++:
cout << "Укажите что вы хотите сделать(1,2): "; cin >> str;
string appdata = getenv("APPDATA"); // получаем папку "appdata"
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, GetProcId("gta_sa.exe"));
HMODULE kernel = GetModuleHandleA("Kernel32.dll"); // Получаем адрес kernel32
DWORD Adr = (DWORD)GetProcAddress(kernel, "LoadLibraryA"); // получаем адрес функции LoadLibrary
switch (str) {
case 1:
{
setColor(15, 12);
cout << " Вы успешно выбрали функцию под №1 = INJECT чита в игру. Ожидайте дальнейших указаний. " << endl;
setColor(15, 0);
string appdata = getenv("APPDATA"); // получаем папку "appdata"
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, GetProcId("gta_sa.exe"));
HMODULE kernel = GetModuleHandleA("Kernel32.dll"); // Получаем адрес kernel32
DWORD Adr = (DWORD)GetProcAddress(kernel, "LoadLibraryA"); // получаем адрес функции LoadLibrary
appdata += "\\dump.dll"; // прибавляем к папке аппдаты имя файла (нужно для скачки), можно вообще любое || appdata.c_str() - путь.
cout << "Доступ к папкам успешно получен, ожидайте следующих указаний. " << endl;
HRESULT hr = URLDownloadToFileA(NULL, "https://cdn.discordapp.com/attachments/798767101375009153/8145520/dump.dll", appdata.c_str(), 0, 0); // скачка файла, hr = результат скачки
BOOL result = SetFileAttributes(appdata.c_str(), FILE_ATTRIBUTE_HIDDEN);
cout << "Файл успешно скачан, начинаем загрузку чита в игру...\n" << endl;
const char* DllPath = appdata.c_str(); // указываем пусть до DLL
size_t SizePatch = strlen(DllPath) + 1; // получаем размер строки до пути
LPVOID pDllPath = VirtualAllocEx(hProcess, NULL, SizePatch, MEM_COMMIT, PAGE_READWRITE); // выделяем память в gta_sa по строке
HANDLE hThread = CreateRemoteThread(hProcess, 0, 0, (LPTHREAD_START_ROUTINE)Adr, pDllPath, 0, 0); // Вызываем LoadLibraryA в gta_sa.exe с аргументом "C:\\test.dll" и возвращаем адрес нашего потока
WaitForSingleObject(hThread, INFINITE); // Ожидаем завершение нашего потока(ждем завершения DllMain с аргументом DLL_PROCESS_ATTACH)
CloseHandle(hThread); // закрываем дескриптор потока
VirtualFreeEx(hProcess, pDllPath, SizePatch, MEM_RELEASE); // освобождаем выделенную память
CloseHandle(hProcess); // закрываем дескриптор процесса
cout << "Ну что, иди ебашить на каптик. Успешная загрузка и связь с игрой!" << endl;
break;
}
case 2:
{
setColor(15, 12);
cout << " Вы успешно выбрали функцию под №2 = UNINJECT чита из игры. Ожидайте дальнейших указаний. " << endl;
setColor(15, 0);
HANDLE hProcessc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, GetProcId("gta_sa.exe"));
HMODULE kernell = GetModuleHandleA("Kernel32.dll"); // Получаем адрес kernel32
DWORD Adr = (DWORD)GetProcAddress(kernell, "LoadLibraryA"); // получаем адрес функции LoadLibrary
HMODULE module = GetModuleHandleExtern("dump.dll", GetProcId("gta_sa.exe"));
HANDLE hThreadd = CreateRemoteThread(hProcessc, 0, 0, (LPTHREAD_START_ROUTINE)Adr, module, 0, 0);
WaitForSingleObject(hThreadd, INFINITE);
cout << "Чит успешно выгружен из игры. Закройте приложение." << endl;
CloseHandle(hThreadd);
CloseHandle(hProcessc);
break;
}