Memimager.

Executa um despejo de memória usando NTSystemDebugControl
Baixe Agora

Memimager. Classificação e resumo

Propaganda

  • Rating:
  • Licença:
  • Freeware
  • Nome do editor:
  • Arne Vidstrom
  • Sistemas operacionais:
  • Windows All
  • Tamanho do arquivo:
  • 7 KB

Memimager. Tag


Memimager. Descrição

A aplicação MemImager foi projetado para ser uma ferramenta que executa um despejo de memória usando NtSystemDebugControl. Usando NtSystemDebugControl para despejar Para o código de controlo 10, que usa uma estrutura com o seguinte esquema de buffer de entrada: - DWORD PhysicalAddress; - DWORD Reserved1; - void * buffer; - DWORD Corpo; Em seguida, podemos por exemplo malloc um buffer de página de tamanho que apontam Buffer para, gravação de 4096 de comprimento, e ponto PhysicalAddress para o endereço da página que deseja copiar o conteúdo. Então nós executamos NtSystemDebugControl e se tudo correr bem o nosso tampão agora contém uma cópia dos dados na página física. Bastante trivial realmente. dentro NtSystemDebugControl Para entender se, e de que forma, alças NtSystemDebugControl cache questões que temos de dar um mergulho no kernel. O kernel exporta a rotina chamada NtSystemDebugControl, que contém uma instrução switch encarregado de despachar para a funcionalidade correta com base no código de controle. No seguinte Não vou descrever cada detalhe minúsculo pouco do código. A primeira razão é que existem muitos detalhes que não são relevantes para o que estamos olhando. Em segundo lugar eu não tenho compilado o código, mas apenas seguiu as partes relevantes da desmontagem (de um kernel 2003 SP0 Windows Server). O código de manipulação de código de controle 10 chama a rotina não documentada _ExLockUserBuffer que faz com que as páginas em nosso buffer (* Buffer) residente, bloqueia-los na memória, e volta (em um ponteiro passado como um parâmetro) um endereço virtual espaço do sistema de apontando para ele. Em seguida, uma outra função não documentada chamada _KdpCopyMemoryChunks é chamado. Os parâmetros passados para ele são entre outros o espaço de endereços virtuais do sistema que aponta para a memória intermédia, o número de bytes para copiar (comprimento), e o endereço para copiar a partir de (PhysicalAddress). Agora ainda uma outra função não documentada é chamado: _MmDbgCopyMemory. Esta função executa a cópia real dos dados. Mas antes que ele possa fazer qualquer cópia ele precisa ter um endereço virtual da fonte em vez de um endereço físico. Por isso, chama a nossa última função não documentada: _MiDbgTranslatePhysicalAddress. Agora estamos realmente se fechando sobre a resposta à nossa pergunta. _MiDbgTranslatePhysicalAddress recebe o nosso endereço físico como um parâmetro. Em seguida, usa uma variável chamada _ValidKernelPte, que serve como uma espécie de modelo para o kernel PTE: s. As bandeiras do modelo são combinados com o endereço físico para formar uma PTE apontando para a página que deseja copiar. Em seguida, o banco de dados PFN é indexado para localizar a entrada correspondente a nossa página de origem. Nesta entrada dos olhares do kernel nas bandeiras CacheAttribute do membro u3.e1. As bandeiras CacheAttribute são então utilizados para definir o índice de PAT no TEP. Agora temos a nossa resposta realmente, mas vou continuar um pouco mais de qualquer maneira. O PTE o kernel tem construído agora é copiado para o local apontado pela variável do kernel _MmDebugPte. Finalmente, a função retorna o endereço virtual que usará o PTE para o mapeamento. Agora _MmDbgCopyMemory está livre para copiar os dados a partir da página de origem física para nosso buffer usando apenas endereços virtuais.


Memimager. Software Relacionado

Guidgen

uma ferramenta de desenvolvedores para criar um ou mais GUID ...

182 35 KB

Download