Нужно было инжектить мун в игру, но вручную делать это не круто. Написал себе, но может кому-то пригодится
Распаковываете архив в любое место, открываете moonloader.exe и запускаете игру
В архиве содержится moonloader 0.27(только вот правила запрещают папки с либами, по этому установите сами - https://www.blast.hk/threads/13305/post-386466), исходник и сам moonloader.exe
СКАЧАТЬ АРХИВ
После завершения gta_sa.exe начнет ждать следующего открытия игры
Распаковываете архив в любое место, открываете moonloader.exe и запускаете игру
В архиве содержится moonloader 0.27(только вот правила запрещают папки с либами, по этому установите сами - https://www.blast.hk/threads/13305/post-386466), исходник и сам moonloader.exe
СКАЧАТЬ АРХИВ
C++:
#include <iostream>
#include <Windows.h>
#include <TlHelp32.h>
HANDLE getHandleProcess(LPCWCHAR processName) {
HANDLE hSnapProcess = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
PROCESSENTRY32 procEntry;
procEntry.dwSize = sizeof(procEntry);
Process32First(hSnapProcess, &procEntry);
do {
if (!wcscmp(procEntry.szExeFile, processName)) {
CloseHandle(hSnapProcess);
return OpenProcess(PROCESS_ALL_ACCESS, FALSE, procEntry.th32ProcessID);
}
} while (Process32Next(hSnapProcess, &procEntry));
CloseHandle(hSnapProcess);
return NULL;
}
int main() {
WCHAR wchMoonLoaderPath[MAX_PATH];
GetFullPathNameW(L"moonloader.asi", MAX_PATH, wchMoonLoaderPath, NULL);
if (GetFileAttributes(wchMoonLoaderPath) == INVALID_FILE_ATTRIBUTES) {
std::wcout << wchMoonLoaderPath << " does not exists";
return -1;
}
std::wcout << "moonloader.asi path: " << wchMoonLoaderPath << std::endl << "Wait gta_sa.exe" << std::endl;
while(true) {
HANDLE hProcess = getHandleProcess(L"gta_sa.exe");
if (hProcess == NULL) {
Sleep(2000);
continue;
}
LPVOID lpAllocMem = VirtualAllocEx(hProcess, NULL, sizeof(wchMoonLoaderPath), MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
if (lpAllocMem == NULL) {
std::wcout << "Error VirtualAllocEx" << std::endl;
CloseHandle(hProcess);
continue;
}
WriteProcessMemory(hProcess, lpAllocMem, wchMoonLoaderPath, sizeof(wchMoonLoaderPath), NULL);
HANDLE hThread = CreateRemoteThread(hProcess, 0, 0, (LPTHREAD_START_ROUTINE)LoadLibrary, lpAllocMem, 0, 0);
if (hThread == NULL) {
std::wcout << "Error CreateRemoteThread" << std::endl;
CloseHandle(hProcess);
continue;
}
std::wcout << "Injected success" << std::endl;
WaitForSingleObject(hThread, INFINITE);
WaitForSingleObject(hProcess, INFINITE);
CloseHandle(hProcess);
std::wcout << "Wait next gta_sa.exe" << std::endl;
}
return 0;
}
Последнее редактирование: