
Ferramenta do Windows para despejar arquivos PE de malware da memória de volta para o disco para análise.
Process Dump é uma ferramenta de linha de comando de engenharia reversa do Windows para despejar componentes de memória de malware de volta para o disco para análise. Muitas vezes, arquivos de malware são empacotados e ofuscados antes de serem executados para evitar scanners de AV, no entanto, quando esses arquivos são executados, eles frequentemente desempacotam ou injetam uma versão limpa do código do malware na memória. Uma tarefa comum para pesquisadores de malware ao analisar malware é despejar esse código desempacotado da memória de volta para o disco para varredura com produtos AV ou para análise com ferramentas de análise estática como o IDA.
Process Dump funciona para sistemas operacionais Windows de 32 e 64 bits e pode despejar componentes de memória de processos específicos ou de todos os processos atualmente em execução. Process Dump suporta a criação e uso de um banco de dados de hashes limpos, para que o despejo de todos os arquivos limpos, como kernel32.dll, possa ser ignorado. Seus principais recursos incluem:
Estou mantendo uma versão compilada oficial no meu site aqui: https://split-code.com/processdump.html
Você pode baixar a versão compilada mais recente do Process Dump aqui:
Isso foi projetado para o Visual Studio 2019 e funciona com a edição gratuita Community. Basta abrir o arquivo do projeto com o VS2019 e compilar, deve ser fácil assim!
O Process dump pode ser usado para despejar todo o código desconhecido da memória (flag '-system'), despejar processos específicos ou executar em um modo de monitoramento que despeja todos os processos pouco antes de terminarem.
Antes do primeiro uso desta ferramenta, quando na estação de trabalho limpa, o banco de dados de hashes de exclusão limpos pode ser gerado por:
Exemplo de uso:
Os argumentos da linha de comando podem ser agrupados da seguinte forma:
Opções Gerais de Despejo
Opções do Banco de Dados de Hashes Limpos
Opções de Saída
| Opção | Descrição |
|---|---|
| -v | Modo detalhado onde mais detalhes serão impressos para depuração. |
| -nh | Nenhum cabeçalho é impresso na saída. |
Opções Avançadas
Claro, aqui está uma versão mais simplificada das informações:
Ao usar o Process Dump em uma sandbox automatizada ou para pesquisa manual antimalware, as etapas a seguir podem ser úteis. Certifique-se de executar todos os comandos como Administrador em um ambiente limpo.
Construa o Banco de Dados de Hashes Limpos: Execute pd64.exe -db gen ou para um processo mais rápido e menos completo, use pd64.exe -db genquick. Dependendo da sua situação, você pode querer tirar um snapshot da sua VM após criar este banco de dados de hashes limpos para que não precise ser repetido toda vez.
Inicie o Monitor de Término do Process Dump: Mantenha pd64.exe -closemon em execução em segundo plano. Ele despejará todos os processos intermediários usados pelo malware.
Execute o Arquivo de Malware: Monitore a instalação do malware. pd64.exe despejará automaticamente qualquer processo que tentar fechar.
Despeje o Malware em Execução da Memória: Quando estiver pronto, use pd64.exe -system para despejar todos os processos.
Os componentes despejados serão encontrados no diretório de trabalho do pd64.exe. Para alterar o caminho de saída, use a flag -o.
Exemplos de nomes de arquivos de arquivos despejados
| Opção | Descrição |
|---|
| -system | Despeja todos os módulos que não correspondem ao banco de dados de hashes limpos de todos os processos acessíveis no diretório de trabalho. |
| -pid <pid> | Despeja todos os módulos que não correspondem ao banco de dados de hashes limpos do PID especificado no diretório de trabalho atual. Use um prefixo '0x' para especificar um PID hexadecimal. |
| -closemon | Executa no modo de monitor. Quando qualquer processo estiver terminando, o process dump primeiro despejará o processo. |
| -p <regex process name> | Despeja todos os módulos que não correspondem ao banco de dados de hashes limpos do nome do processo encontrado para corresponder ao filtro no PID especificado no diretório de trabalho atual. |
| -a <module base address> | Despeja um módulo no endereço base especificado do processo. |
| -o <path> | Define a pasta raiz de saída padrão para componentes despejados. |
| Opção | Descrição |
|---|
| -db gen | Processa automaticamente algumas pastas comuns, bem como todos os processos atualmente em execução e adiciona os hashes de módulos encontrados ao banco de dados de hashes limpos. Ele adicionará todos os arquivos recursivamente em: %WINDIR%, %HOMEPATH%, C:\Program Files\, C:\Program Files (x86)\, bem como todos os módulos em todos os processos em execução. Esses hashes limpos serão adicionados ao arquivo clean.hashes no diretório do aplicativo. Durante comandos futuros de despejo de processos, esses módulos conhecidos não serão despejados. Recomenda-se executar este comando uma vez em um sistema limpo antes de usar a ferramenta para que não muitos módulos sejam despejados da memória. |
| -db genquick | O mesmo que acima, mas apenas adiciona os hashes de todos os módulos em todos os processos ao banco de dados de hashes limpos. Esta é uma maneira muito mais rápida de construir o banco de dados de hashes limpos, mas será menos completo. |
| -db add <dir> | Adiciona todos os arquivos no diretório especificado recursivamente ao banco de dados de hashes limpos. |
| -db rem <dir> | Remove todos os arquivos no diretório especificado recursivamente do banco de dados de hashes limpos. |
| -nr | Desabilita a recursão nos comandos de adicionar ou remover diretório do banco de dados de hashes. |
| -db clean | Limpa o banco de dados de hashes limpos. |
| -db ignore | Ignora o banco de dados de hashes limpos ao despejar um processo desta vez. Todos os módulos serão despejados mesmo se uma correspondência for encontrada. |
| -cdb <filepath> | Caminho completo do arquivo para o banco de dados de hashes limpos a ser usado nesta execução se você quiser substituir o padrão clean.hashes. |
| -edb <filepath> | Caminho completo do arquivo para o banco de dados de hashes de ponto de entrada a ser usado nesta execução. |
| -esdb <filepath> | Caminho completo do arquivo para o banco de dados de hashes curtos de ponto de entrada a ser usado nesta execução. |
| Opção | Descrição |
|---|
| -g | Força a geração de cabeçalhos PE do zero, ignorando cabeçalhos existentes. |
| -eprec | Força o ponto de entrada a ser reconstruído, mesmo que um válido pareça existir. |
| -ni | Desabilita a reconstrução de importações. |
| -nc | Desabilita o despejo de regiões de código soltas. |
| -nt | Desabilita multithreading. |
| -nep | Desabilita o hash do ponto de entrada. |
| -t <thread count> | Define o número de threads a serem usados (padrão 16). |
| Comando | Descrição |
|---|
pd64.exe -db genquick | Construa rapidamente o banco de dados de módulos limpos com base nos processos em execução atualmente. O Process Dump em tarefas posteriores despejará apenas módulos não reconhecidos. |
pd64.exe -system | Despeje todos os módulos e pedaços ocultos de todos os processos ignorando módulos limpos. |
pd64.exe -closemon | Execute no modo de monitor de término. Isso despejará todos os processos quando eles tentarem terminar. |
pd64.exe -pid 0x18A | Despeje módulos e pedaços ocultos de um ID de processo específico. |
pd64.exe -p .\*chrome.\* | Despeje módulos e pedaços ocultos pelo nome do processo. |
pd64.exe -db gen | Construa um banco de dados de hashes limpos de módulos conhecidos. Isso é usado para evitar despejar módulos bons conhecidos em tarefas posteriores. |
pd64.exe -pid 0x1a3 -a 0xffb4000 | Despeje código de um endereço específico no PID. Isso gerará dois arquivos para análise, com cabeçalhos PE reconstruídos de 32 bits e 64 bits: notepad_exe_x64_hidden_FFB40000.exe e notepad_exe_x86_hidden_FFB40000.exe. |