Ir para conteúdo
Faça parte da equipe! (2024) ×

Sobre VirtualQueryEx


Ryokusei
 Compartilhar

Posts Recomendados

Recomenda-se a prévia leitura destes tópicos:

- Memória - 1. Introdução

- Sobre ReadProcessMemory

- Sobre Scanners de Memória (Memory Scanner)

 

VirtualQueryEx recupera informação sobre uma séria de páginas dentro do espaço de endereço virtual de um processo.

 

Sintaxe:

É necessário se cadastrar para acessar o conteúdo.

 

VirtualQueryEx function (Windows)

 

O mais importante está em lpBuffer, que é do tipo PMEMORY_BASIC_INFORMATION.

O struct MEMORY_BASIC_INFORMATION contém os seguintes dados:

 

É necessário se cadastrar para acessar o conteúdo.

 

MEMORY_BASIC_INFORMATION structure (Windows)

 

Sobre o tipo de proteção temos diversas constantes, sendo alguns exemplos: PAGE_NOACCESS, PAGE_EXECUTE, PAGE_EXECUTE_READWRITE, PAGE_READONLY.

Memory Protection Constants (Windows)

 

Sobre o State temos as constantes:

 

[table=class: grid, align: left]

[tr]

[td]Estado[/td]

[td]Significado[/td]

[/tr]

[tr]

[td]MEM_COMMIT (0x1000)[/td]

[td]Indica que o estado em que uma área de memória física foi alocada[/td]

[/tr]

[tr]

[td]MEM_FREE (0x10000)[/td]

[td]Indica páginas livres, não acessível por processos. Para páginas livres as informações de AllocationBase, AllocationProtect, Protect, e Type são indefinidas[/td]

[/tr]

[tr]

[td]MEM_RESERVE (0x2000)[/td]

[td]Indica uma série de páginas reservadas no processo que não estão em uso, mas prontas para receber alocação física[/td]

[/tr]

[/table]

 

É importante notar que o State é a primeira coisa a se verificar quando se está construindo um Memory Scanner.

 

O Type não será abordado, vide o disclaimer. Para mais informações, pesquise sobre mapeamento de memória.

 

Para um scanner de memória é importante:

 

- Ler as páginas que estejam alocadas, ou seja, o State deve ser MEM_COMMIT;

- Ter acesso à página de memória, ou seja, o Protect não pode ser PAGE_NOACCESS;

- O tamanho da página lida pode ser alocado e copiado diretamente para o processo do Memory Scanner em um único bloco, pois páginas geralmente possuem um tamanho relativamente pequeno.

 

Com essas informações é possível ter uma imagem da memória de um processo e saber onde se deve ou não ler memória.

Deve-se ter atenção em relação aos parâmetros de escolha da página de memória a ser lida, principalmente sobre páginas protegidas com PAGE_GUARD.

 

Projeto Iustrativo

 

jbkxefFqr9i3UO.png

 

[DOWN]Download[/DOWN]

[sCAN]Scan[/sCAN]

 


Disclaimer

 

Esse tópico foi escrito com objetivo de usar VirtualQueryEx para Memory Scanners. Alguns itens importantes sobre a função e seus membros podem não ter sido abordados, ou foram abordados superficialmente.

Link para o comentário
Compartilhar em outros sites

Este tópico está impedido de receber novos posts.
 Compartilhar

×
×
  • Criar Novo...

Informação Importante

Nós fazemos uso de cookies no seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies , caso contrário, vamos supor que você está bem para continuar.