Jump to content

Turbine o seu Perfil

Confira a atualização e participe do clube!
Clique e saiba mais

Junte-se ao Clube de Membros VIP

Tenha destaque e diversos benefícios!
Confira Aqui

Acesse nosso Discord

Conheça nossos canais interativos
Confira Aqui
Notícia
  • Adquira já o seu VIP!

Archived

This topic is now archived and is closed to further replies.

Ryokusei

Sobre VirtualQueryEx

Recommended Posts

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

-

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

-

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

-

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

 

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

 

Sintaxe:

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

 

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

 

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

O struct MEMORY_BASIC_INFORMATION contém os seguintes dados:

 

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

 

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

 

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

Hidden Content

    Give reaction or reply to this topic to see the hidden content.

 

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]

Hidden Content

    Give reaction or reply to this topic to see the hidden content.
[/DOWN]

[sCAN]

Hidden Content

    Give reaction or reply to this topic to see the hidden content.
[/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.

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.

×
×
  • Create New...