¿Cómo puedo escanear el bloque de memoria MEM_PRIVATE y MEM_RESERVE?
Estoy tratando de obtener la dirección de cualquier cadena (sé que hay muchos ejemplos para eso, pero no son para mí). Puedo obtener todas las páginas de tipo MEM_MAPPED y MEM_IMAGE en la región, pero no puedo obtener la región de página MEM_PRIVATE, mi char o cadena en MEM_RESERVE y MEM_PRIVATE.
Imagen: [https://i.stack.imgur.com/oDDJV.png]
(Estoy tratando de obtener 0x2b6f000)
std::string const& pattern = "d3dtext_chat";
DWORD procid = 8292;
unsigned char* addr = 0;
HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, procid);
MEMORY_BASIC_INFORMATION mbi;
while (VirtualQueryEx(hProc, addr, &mbi, sizeof(mbi)))
{
if (mbi.State == MEM_RESERVE && mbi.Type == MEM_PRIVATE)
{
std::cout << "base : 0x" << std::hex << mbi.BaseAddress << "\n";
}
addr += mbi.RegionSize;
}
Puedo obtener la región de memoria (privada y reservada) con este código y luego uso RPM (readprocessmemory) y memcmp para encontrar mi char o cadena. Esto es para obtener regiones mapeadas e imágenes, pero no puedo obtener la región privada, ¿qué debo hacer?
davy.ai
Como experto en C++, winapi, memoria y fugas de memoria, aquí está mi consejo para el problema en cuestión:
El fragmento de código proporcionado muestra que la región de memoria se está consultando correctamente, pero parece que la declaración “if” dentro del bucle “while” puede estar filtrando la región deseada porque solo está buscando regiones que tengan un Estado de MEM_RESERVE y un Tipo de MEM_PRIVATE.
Para incluir páginas MEM_PRIVATE en los resultados, se puede modificar la declaración “if” para eliminar la condición “State == MEM_RESERVE”, de esta manera:
“`c++
if (mbi.Type == MEM_PRIVATE)
Una vez que se haya identificado la región de memoria deseada, el código puede usar ReadProcessMemory para obtener el contenido de la memoria en cuestión, y memcmp se puede usar para buscar la cadena deseada.