From 9fd62daff16526ece4f5917d1632cd1fa697cf65 Mon Sep 17 00:00:00 2001 From: Duncan Ogilvie Date: Mon, 4 Nov 2019 13:44:24 +0100 Subject: [PATCH] add fallback to ReadMemorySafe --- StaticEngine/Emulator.h | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/StaticEngine/Emulator.h b/StaticEngine/Emulator.h index d4e9273..21946b1 100644 --- a/StaticEngine/Emulator.h +++ b/StaticEngine/Emulator.h @@ -242,7 +242,19 @@ public: SIZE_T s; if(!lpNumberOfBytesRead) lpNumberOfBytesRead = &s; - return !!ReadProcessMemory(hProcess, lpBaseAddress, lpBuffer, nSize, lpNumberOfBytesRead); + auto x = !!ReadProcessMemory(hProcess, lpBaseAddress, lpBuffer, nSize, lpNumberOfBytesRead); + if (!x && nSize <= 0x1000) + { + NtSuspendProcess(hProcess); + DWORD oldProtect = 0; + if (VirtualProtectEx(hProcess, lpBaseAddress, 0x1000, PAGE_EXECUTE_READWRITE, &oldProtect)) + { + x = !!ReadProcessMemory(hProcess, lpBaseAddress, lpBuffer, nSize, lpNumberOfBytesRead); + VirtualProtectEx(hProcess, lpBaseAddress, 0x1000, oldProtect, &oldProtect); + } + NtResumeProcess(hProcess); + } + return x; } bool MemoryWriteSafe(HANDLE hProcess, LPVOID lpBaseAddress, LPCVOID lpBuffer, SIZE_T nSize, SIZE_T* lpNumberOfBytesWritten)