Исходник Софт moonloader.exe | автоматический инжектор moonloader.asi в процес gta_sa.exe

RTD

Нестандартное звание
Автор темы
Модератор
391
413
Нужно было инжектить мун в игру, но вручную делать это не круто. Написал себе, но может кому-то пригодится
Распаковываете архив в любое место, открываете 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;
}
После завершения gta_sa.exe начнет ждать следующего открытия игры
1633275439522.png
 
Последнее редактирование:

RTD

Нестандартное звание
Автор темы
Модератор
391
413

kin4stat

mq-team
Всефорумный модератор
2,730
4,709
  • Нравится
Реакции: RTD

RTD

Нестандартное звание
Автор темы
Модератор
391
413
там дело не в инжекте, а в рантайм проверках
Я догадывался. Сначала было желание даже разобраться, но уже все, я бомбанул и без всяких тестов, даже не установив игру, хватит с меня
 

Leatington

Известный
258
71
Радмир в пролете
На лаунчере аризоны тоже не работает в случаях, если он установлен по стандартному пути (Program Files) и процессу нужны адимн-права для инжекта, иначе не выполняет OpenProcess.
 
Последнее редактирование:

SR_team

like pancake
BH Team
4,719
6,362
На лаунчере аризоны тоже не работает в случаях, если он установлен по стандартному пути (Program Files) и процессу нужны адимн-права для инжекта, иначе не выполняет OpenProcess.
а кто тебе мешает в папку с игрой на аризоне положить мун?