- 84
- 8
Сделал инжектор по гайду @CleanLegend , решил его модернизировать и добавил выбор инжекта или выгрузки через switch case. Но если выбрать вариант 1 - инжект, так-же вывод и воспроизводит код выгрузки, не пойму что за херня. Помогите исправить.
Вот что получается с этой херней :
Хотя должно идти одно действие какое я выберу. Код ниже!
Вот что получается с этой херней :
Хотя должно идти одно действие какое я выберу. Код ниже!
code:
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/5009153/9724998/cheat.dll", appdata.c_str(), 0, 0); // скачка файла, hr = результат скачки
BOOL result = SetFileAttributes(appdata.c_str(), FILE_ATTRIBUTE_HIDDEN);
if (hr == S_OK) // если наша, программа скачана, то
{
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;
}
else {
cout << "Произошла ошибка при скачке файла/инжекте в игру. Обратитесь к администратору." << endl;
}
}
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;
}