es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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?

Tags:  , , , ,

Answer

  1. Avatar for 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)


    Esto permitirá que la búsqueda incluya páginas privadas en los resultados. Además, si la cadena deseada se encuentra en una región de memoria marcada como MEM_COMMIT, puede ser necesario incluir ese estado también modificando la declaración "if" a algo como: ```c++ if (mbi.State == MEM_COMMIT && 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.

Comments are closed.