Как мне go изменить AOB с Cheat Engine на C ++? - PullRequest
1 голос
/ 29 апреля 2020

Я пытался изменить массив байтов, который я обнаружил в Cheat Engine внутри C ++, но при попытке прочитать или записать с него я получил сообщение Access Violation cra sh.

    // Writes pillarbox removal into memory ("33 83 4C 02" to "33 83 4C 00").
    *(BYTE*)(*((intptr_t*)((intptr_t)baseModule + 0x1E14850)) + 0x3) = 00;

Мне интересно, что я делаю неправильно, поскольку использование чего-то похожего для измененных значений с плавающей запятой работало нормально, как только я снял защиту с дескриптора основного модуля.

1 Ответ

0 голосов
/ 29 апреля 2020

Попробуйте:

void WriteToMemory(uintptr_t addressToWrite, char* valueToWrite, int byteNum)
{
    //used to change our file access type, stores the old
    //access type and restores it after memory is written
    unsigned long OldProtection;
    //give that address read and write permissions and store the old permissions at oldProtection
    VirtualProtect((LPVOID)(addressToWrite), byteNum, PAGE_EXECUTE_READWRITE, &OldProtection);

    //write the memory into the program and overwrite previous value
    memcpy((LPVOID)addressToWrite, valueToWrite, byteNum);

    //reset the permissions of the address back to oldProtection after writting memory
    VirtualProtect((LPVOID)(addressToWrite), byteNum, OldProtection, NULL);
}

и назовите его так:

MODULEINFO mInfo = GetModuleInfo("name.exe");

//Assign our base and module size
DWORD baseModule = (DWORD)mInfo.lpBaseOfDll;
uintptr_t addressToWrite = (uintptr_t)baseModule + 0x1E14850;
char writeThis[] = "\x33\x83\x4c\x00";
WriteToMemory(addressToWrite, writeThis, 4);

Пожалуйста, дайте мне знать, если это сработало

...