
A ferramenta de aquisição de memória multi-plataforma.

WinPmem tem sido o driver de aquisição de memória de código aberto padrão para Windows por muito tempo. Antigamente fazia parte do projeto Rekall, mas foi recentemente separado em seu próprio repositório.
Esta é a versão Windows. A versão Linux, Linpmem, está em: https://github.com/Velocidex/Linpmem
Este código foi originalmente desenvolvido no Google, mas foi lançado sob a Licença Apache.
WinPmem é uma ferramenta de aquisição de memória física com as seguintes funcionalidades:
Código aberto
Suporte para Win7 - Win 10, x86 + x64. O WDK7600 pode ser usado para incluir suporte ao WinXP. Por padrão, os executáveis WinPmem fornecidos serão compilados com WDK10, suportando Win7 - Win10, e apresentando código mais moderno.
Três métodos independentes de leitura, com dois métodos para criar um despejo de memória completo. Um método deve sempre funcionar mesmo diante de rootkits em modo kernel.
Suporte a imagem de despejo de memória bruta.
Uma interface de dispositivo de leitura é usada em vez de escrever a imagem a partir do kernel como alguns outros imageadores. Isso nos permite ter um imageador de espaço de usuário complexo (por exemplo, copiar pela rede, hash etc.), bem como executar análises no sistema ativo (por exemplo, pode ser executado diretamente no dispositivo).
Os arquivos neste diretório (incluindo os fontes do WinPmem e binários assinados) estão disponíveis sob a seguinte licença: Apache License, Version 2.0
Existem dois executáveis WinPmem: winpmem_mini_x86.exe e winpmem_mini_x64.exe. Ambas as versões contêm ambos os drivers (versões 32 e 64 bits).
O mini no nome do binário refere-se a este imageador ser um imageador simples - ele só pode produzir imagens em formato RAW. No passado, lançamos um imageador WinPmem baseado em AFF4, mas esse ainda não foi atualizado para o novo driver. Informe-nos se você precisar do imageador baseado em AFF4.
O programa python está atualmente em construção, mas funciona como uma demonstração de como usar o imageador a partir do Python.
Este programa é mais fácil de usar para resposta a incidentes, pois não requer outras dependências além do próprio executável. O programa carregará o driver correto (32 ou 64 bits) automaticamente e é autocontido.
winpmem_mini_x64.exe physmem.raw
Escreve uma imagem bruta em physmem.raw usando o método padrão de aquisição.
winpmem_mini_x64.exe
Invoca a impressão de uso / manual curto.
Para adquirir uma imagem bruta usando especificamente o método MmMapIoSpace:
winpmem.exe -1 myimage.raw
O driver será descarregado automaticamente após a aquisição da imagem!
Devido à forma como a Microsoft projetou a função MJ READ, a leitura da memória física falhará no Winpmem com STATUS_INVALID_PARAMETER se um endereço físico maior que metade do valor máximo de um UINT64 for especificado. Por exemplo, isso é verdade se alguém quiser ler partes superiores da memória física e tiver uma memória física gigante (mais de 9.223.372.036.854.775.807). Isso parece altamente improvável, mas os tamanhos de RAM atuais continuam a aumentar.
O código fonte do WinPmem suporta escrita na memória, bem como leitura. Esta capacidade é uma ótima ferramenta de aprendizado, pois muitas técnicas de ocultação de rootkits podem ser emuladas escrevendo diretamente na memória.
Esta funcionalidade deve ser usada com extrema cautela!
NOTA: Como esta é uma capacidade bastante perigosa, os drivers binários assinados têm suporte de escrita desabilitado. Você pode reconstruir os drivers para produzir binários assinados de teste se quiser usar este recurso. Os binários não assinados (na verdade, autoassinados com um certificado de teste) não podem carregar em um sistema normal por serem autoassinados de teste, mas você pode permitir que os drivers não assinados sejam carregados em um sistema de teste emitindo (consulte https://docs.microsoft.com/en-us/windows-hardware/drivers/install/the-testsigning-boot-configuration-option:
Bcdedit.exe -set TESTSIGNING ON
e reinicie. Você verá um pequeno texto "Test Mode" na área de trabalho para lembrá-lo de que esta máquina está configurada para drivers assinados de teste.
Além disso, o suporte a escrita também deve ser ativado no momento do carregamento:
winpmem.exe -w -l
Isso carregará os drivers e ativará o suporte a escrita.
Winpmem, assim como Linpmem, não existiriam sem o trabalho de nossos antecessores do (agora aposentado) projeto REKALL: https://github.com/google/rekall.
Este projeto também não seria possível sem o apoio da comunidade DFIR em geral:
Nossos contribuidores de código aberto: