Я беру базовый адрес своей программы и жестко запрограммировал его в скрипте C++ вокруг ReadProcessMemory «+ 251CF1632FC», поскольку это адрес указателя, который я получаю в чит-движке для получения очков опыта (то, что я пытаюсь изменить).
Далее я получаю код ошибки «3e6», что, очевидно, означает «NOACCESS»:
Код: Выделить всё
#include
#include
#include
#include
DWORD_PTR GetModuleBaseAddress(const TCHAR* moduleName, DWORD processID) {
DWORD_PTR baseAddress = 0;
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, processID);
if (hSnapshot == INVALID_HANDLE_VALUE) {
return 0; // Handle error
}
MODULEENTRY32 moduleEntry;
moduleEntry.dwSize = sizeof(MODULEENTRY32);
if (Module32First(hSnapshot, &moduleEntry)) {
do {
if (_tcscmp(moduleEntry.szModule, moduleName) == 0) {
baseAddress = (DWORD_PTR)moduleEntry.modBaseAddr;
break;
}
} while (Module32Next(hSnapshot, &moduleEntry));
}
CloseHandle(hSnapshot);
return baseAddress;
}
bool ReadMemory(HANDLE hProcess, DWORD_PTR address, void* buffer, SIZE_T size) {
SIZE_T bytesRead;
return ReadProcessMemory(hProcess, (LPCVOID)address, buffer, size, &bytesRead) && bytesRead == size;
}
int GetExperiencePoints(HANDLE hProcess, DWORD_PTR baseAddress) {
// Pointer offset for experience points
DWORD_PTR experiencePointerOffset = 0x251CF1632FC; // Adjust based on how you want to use it
// Calculate final address
DWORD_PTR finalAddress = baseAddress + experiencePointerOffset;
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/79145866/looking-for-a-workaround-for-aslr[/url]
Мобильная версия