@muttley
I would like to get no-ASLR address to save in config, but I'm not knowing how this calculate ;/

#edit
I know why this function:
Code:
bool runMC(const char* path, DWORD address, bool tibia91plus){
    bool ret = true;
    PROCESS_INFORMATION pi;
	STARTUPINFOA si = {sizeof(si)};

	std::string spath = path;
	if(spath.find_last_of("\\") != spath.size()-1)
        spath += "\\";

    path = spath.c_str();

    if(CreateProcess(std::string(spath+"Tibia.exe").c_str(), NULL, NULL, NULL, false, CREATE_SUSPENDED, NULL, path, &si, &pi) == 0)
        ret = false;

    if(WriteProcessMemory(pi.hProcess, (LPVOID)address, &MCJMP, 1, NULL) == 0)
        ret = false;
    
    ResumeThread(pi.hThread);
    
    if(WaitForInputIdle(pi.hProcess, -1) != 0)
        ret = false;

    if(WriteProcessMemory(pi.hProcess, (LPVOID)address, &MCJNZ, 1, NULL) == 0)
        ret = false;

    CloseHandle(pi.hProcess);
    CloseHandle(pi.hThread);

    return ret;
}
not work.

Module base I can check before ResumeThread function.
Ideas??