Значение сканера подписи неверно - PullRequest
0 голосов
/ 27 февраля 2019

Я изучаю сканирование сигнатур и у меня возникают проблемы.Мой код вроде уродлив, но он должен работать ,, не могу понять, как решить мою проблему.Моя основная функция memory.findSignature () в моем main возвращает значение мусора, и поэтому, когда я читаю и даю RemoteHealth значение, это также мусор.

Main:

    LPCSTR signature = "\x48\x4A\x85\x2A\x44\x49";
LPCSTR mask = "xxxxxx";
uintptr_t healthAddr = memory.findSignature(CS.client.dwBase, CS.client.dwSize, signature, mask);
int RemoteHealth = memory.readAddress<int>(healthAddr);
std::cout << "value:" << std::hex << RemoteHealth <<   " address:" << healthAddr <<std::endl;

memory.h:

        bool memoryCompare(const byte* data, const byte* mask, const char* szMask) {
    for (; *szMask; ++szMask, ++data, ++mask) {
        if (*szMask == 'x' && *data != *mask) {
            return false;
        }
    }
    return true;
}

uintptr_t findSignature(uintptr_t sigStart, uintptr_t sigSize, const char* signature, const char* mask) {
    byte* data = new byte[sigSize];
    SIZE_T bytesRead;

    ReadProcessMemory(procHandle, (LPVOID)sigStart, data, sigSize, &bytesRead);
    for (uintptr_t i = 0; i < sigSize; i++) {
        if (this->memoryCompare((const byte*)(data + i), (const byte*)signature, mask)) {
            delete[] data;
            return sigStart + i;
        }
    }
    delete[] data;
    return NULL;
}

Я не знаю, что это может объяснить, но я знаю, что проблема в одном из моих двухфункции памяти ...

http://prntscr.com/mqpx9h
http://prntscr.com/mqpz85
http://prntscr.com/mqpzqm

возврат в memoryCompare перевернут, но значения по-прежнему являются мусором при чтении .... адрес просто читается как первый в модуле: /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...