HookDump
Despejo de hooks de funções do EDR
Consulte o post do blog Zeroperil para mais informações https://zeroperil.co.uk/hookdump/
Compilando o código-fonte
- Para compilar isto, você precisará do Visual Studio 2019 (a edição community é suficiente) e CMake. O arquivo de lote Configure.bat criará dois diretórios de compilação com soluções do Visual Studio.
- O projeto pode compilar com MinGW usando a linha de comando correta do CMake, isso não foi testado, YMMV.
- Há uma dependência do desassemblador zydis, portanto, certifique-se de atualizar os submódulos no git antes de configurar o projeto.
- Existem projetos de 32 bits e 64 bits; você pode descobrir que os EDRs hookam funções diferentes em 32/64 bits, então compilar e executar ambos os executáveis pode fornecer resultados mais completos.
Notas
- Alguns EDRs substituem o stub WOW na estrutura TEB (especificamente Wow32Reserved) para hookar chamadas de sistema para binários de 32 bits. Neste caso, você pode ver zero hooks, já que nenhuma instrução de salto está presente na NTDLL. Muito provavelmente você verá hooks na versão x64, pois a instrução syscall é usada para chamadas de sistema em vez de um stub WOW.
- Observamos que o Windows Defender não usa nenhum hook em modo usuário.
- Esta ferramenta foi projetada para ser executada como um usuário padrão, não é necessário elevação de privilégios.
Tipos de Hooks Detectados
JMP
Uma instrução de salto foi aplicada na função para redirecionar o fluxo de execução.
WOW
Detecção do stub WOW64 de chamada de sistema sendo hookado, o que permite filtrar todas as chamadas de sistema.
EAT
O endereço na tabela de endereços de exportação não corresponde ao endereço na tabela de endereços de exportação na cópia em disco.
GPA
Hook de GetProcAddress, um recurso experimental; isso só é exibido no modo detalhado, quando o resultado de GetProcAddress não corresponde ao endereço da função resolvido manualmente. YYMV com isso e algum cuidado deve ser tomado para verificar os resultados.
Verificação
A única maneira de verificar verdadeiramente o funcionamento correto do programa é verificar em um depurador se os hooks estão presentes. Se você estiver obtendo um resultado de zero hooks e espera ver algo diferente, primeiro verifique isso em um depurador e entre em contato.