Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
BugChecker — Depurador de kernel similar ao SoftICE para Windows 11 | Kitploit
Ferramentas/GitHubGitHub/vitoplantamura/bugchecker
Análise Dinâmica (Sandboxing)Engenharia ReversaDepuradoresAnálise de Binários
GitHubvitoplantamura/bugchecker

BugChecker

Depurador de kernel similar ao SoftICE para Windows 11

Ver Repositório
1.1k144há 3 anosRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

BugChecker

Introdução

BugChecker é um depurador de kernel e usuário semelhante ao SoftICE para Windows 11 (e também Windows XP: suporta versões do Windows do XP ao 11, tanto x86 quanto x64). O BugChecker não requer uma segunda máquina conectada ao sistema que está sendo depurado, como no caso do WinDbg e KD. Esta versão do BugChecker (diferentemente da versão original desenvolvida 20 anos atrás) utiliza a API KD interna e não documentada do NTOSKRNL. A API KD permite que WinDbg/KD faça chamadas como ler/escrever memória virtual, ler/escrever registradores, colocar um breakpoint em um endereço, etc.

Por outro lado, o BugChecker original, assim como o SoftICE, costumava "assumir o controle" do sistema, interceptando várias APIs do kernel (tanto exportadas quanto privadas), assumindo o controle do APIC, enviando IPIs, etc. Essa abordagem aumenta a complexidade exponencialmente (e reduz a estabilidade do sistema), pois a implementação deve ser compatível com todas as versões e subversões suportadas do Windows (no nível da assinatura da função), bem como todas as possíveis configurações de hardware suportadas. Além disso, 20 anos depois, o PatchGuard torna essa solução impossível.

Por outro lado, esta versão do BugChecker, ao interceptar chamadas a KdSendPacket e KdReceivePacket no kernel, apresenta-se à máquina que está sendo depurada como um segundo sistema executando um depurador de kernel externo, mas, na realidade, tudo acontece na mesma máquina. Normalmente, isso é alcançado substituindo KDCOM.DLL (que é o módulo que implementa a comunicação por cabo serial para a API KD no Windows) e iniciando o sistema em modo de depuração de kernel. Essa abordagem (inspirada pelo VirtualKD) reduz a complexidade e aumenta a estabilidade e compatibilidade (e portabilidade, por exemplo, para ARM - e modularidade, uma vez que as capacidades de depuração de baixo nível são implementadas por trás de KdXxxPacket e poderiam ser substituídas por uma implementação personalizada). Além disso, a presença de um depurador de kernel na inicialização (embora "falso") faz com que o Windows desabilite o PatchGuard.

No momento, o BugChecker requer um teclado PS/2 para entrada e um framebuffer linear para escrever sua saída. Observe que o teclado embutido de muitos laptops modernos ainda é PS/2.

Funcionalidades

  • Suporte para Windows XP até Windows 11, x86 e x64, e kernels SMP. Suporte para processos WOW64 em x64.
  • Integração do QuickJSPP, que é uma porta do QuickJS para MSVC++. Antes de chamar o QuickJS, o BugChecker salva o estado da FPU (em x86) e alterna para uma pilha expandida de 128 KB.
  • Comandos aceitam expressões JS. Por exemplo, "U rip+rax*4" e "U MyJsFn(rax+2)" são comandos válidos. Funções personalizadas podem ser definidas na Janela de Script. Os registradores da CPU são declarados automaticamente como variáveis de escopo global pelo BugChecker.
  • Suporte para arquivos de símbolo PDB. Arquivos PDB podem ser especificados manualmente ou o Symbol Loader pode baixá-los de um servidor de símbolos.
  • Código JavaScript pode chamar as seguintes funções assíncronas: WriteReg, ReadMem, WriteMem.
  • Breakpoints podem ter uma condição JS: se a condição for avaliada como 0, não ocorre "breakin". Isso permite definir "Logpoints" e breakpoints que podem alterar o fluxo de execução.
  • Janela de log mostra as mensagens enviadas ao depurador de kernel (por exemplo, mensagens DbgPrint).
  • Janela JavaScript com destaque de sintaxe.
  • A tecla Tab permite, com alguns dígitos, percorrer todos os números hexadecimais na tela ou, com alguns caracteres, percorrer todos os símbolos que contêm esses caracteres.
  • EASTL e corrotinas C++20 tornam a criação de novos comandos uma moleza. Sinta-se à vontade para enviar seus pull requests!

Vídeos (Youtube)

Demonstração do BugChecker no Windows 11 22H2, dentro do VirtualBox 7.0.4. Uma condição de breakpoint JavaScript é escrita que altera o fluxo de execução em um thread de modo usuário.

Assista ao vídeo

BugChecker rodando em um ambiente muito restrito: um Raspberry Pi 4 (4GB RAM), via QEMU no Windows XP (512MB RAM). Um breakpoint é usado para registrar todas as chamadas SYSENTER do modo usuário para o kernel. O índice do serviço é armazenado em um array JavaScript.

Assista ao vídeo

Executando BugChecker diretamente em hardware real, em um HP Pavilion Dv2000, que é um PC antigo com teclado PS/2. O sistema operacional é Windows 7 Home 32 bits.

Assista ao vídeo

Instruções de Instalação

Introdução

Certifique-se de que o Secure Boot esteja desabilitado ao instalar e usar o BugChecker. Normalmente você pode reativá-lo depois. Se estiver usando VMware ou VirtualBox, o Secure Boot pode ser desabilitado nas configurações da máquina virtual.

Considere também habilitar o menu de inicialização legado, se estiver usando Windows 8, 10 ou 11, usando o comando: bcdedit /set "{current}" bootmenupolicy legacy. Isso permite uma experiência mais suave durante a inicialização, permitindo selecionar a opção de boot do BugChecker e desabilitar a Imposição de Assinatura de Driver ao mesmo tempo.

Instruções

O primeiro passo é iniciar o Symbol Loader:

Symbol Loader

Se necessário, desabilite os drivers de vídeo clicando no botão "Disable Display Drvs". A mesma coisa pode ser feita no Gerenciador de Dispositivos do Windows. Após desabilitar os drivers de vídeo, eles permanecem desabilitados mesmo após uma reinicialização do sistema. Eles podem ser reabilitados a qualquer momento depois, quando não estiver usando o BugChecker.

O ponto aqui é que o BugChecker precisa de um framebuffer linear com formato de 32 bits por pixel para desenhar sua interface. Ao desabilitar os drivers de vídeo, o Windows descarta a aceleração de hardware para desenhar sua interface e volta para o modo de compatibilidade VGA. Se estiver executando em hardware real ou VMware, você deve desabilitar os drivers de vídeo. Se estiver executando no VirtualBox, você deve desabilitar os drivers de vídeo ou definir a configuração vm_screen no BugChecker.dat, conforme descrito abaixo. Se estiver executando no QEMU, você não precisa desabilitar os drivers de vídeo, mas certifique-se de especificar o dispositivo de vídeo "-vga std".

Observe que o modo de compatibilidade VGA pode limitar a resolução máxima da tela. O VMware é limitado a uma resolução máxima de 1152x864. O QEMU com o dispositivo de vídeo "-vga std" não sofre dessa limitação.

Curiosamente, se o BugChecker for instalado em um sistema com mais de uma placa de vídeo, é possível desabilitar os drivers de vídeo de apenas uma placa de vídeo, que será a placa conectada à tela que mostrará a interface do BugChecker. A segunda placa (definida como display principal) manterá todos os seus recursos de aceleração 2D e 3D, incluindo suporte a OpenGL e DirectX (NOTA: testado no VMware, com Windows 11 e um display DisplayLink).

Em seguida, clique em "Start Driver", depois em "Auto Detect" e finalmente em "Save". "Auto Detect" deve ser capaz de determinar automaticamente a largura, altura, endereço físico e stride do framebuffer. No entanto, você pode especificar essas configurações manualmente (não se esqueça de clicar em "Save" ao terminar). Se "Stride" for 0, ele é calculado como "Width" * 4 automaticamente ao iniciar o driver. "Address" (ou seja, endereço físico do framebuffer) pode ser obtido no Gerenciador de Dispositivos do Windows, clicando em "Propriedades" do dispositivo de vídeo, na guia "Recursos".

Em seguida, clique em "Callback" na seção "KDCOM Hook Method", depois em "Copy/Replace Kdcom" e, finalmente, você pode reiniciar o sistema.

Este processo de configuração precisa ser feito apenas uma vez e os drivers de vídeo podem ser reabilitados, se necessário. No entanto, ao usar o BugChecker, os drivers de vídeo devem ser desabilitados novamente, se exigido pela sua configuração.

Configuração vm_screen para VirtualBox (Experimental)

A configuração vm_screen no BugChecker.dat permite abrir a interface do depurador BugChecker no VirtualBox sem especificar antecipadamente uma resolução de tela no Symbol Loader e sem desabilitar os drivers de vídeo.

A ideia é escrever diretamente nas portas de I/O e no Buffer de Comandos do dispositivo de vídeo virtual para obter a resolução atual da tela e notificar o hipervisor sobre qualquer atualização no framebuffer.

Esta solução foi inspirada pelo driver X.org xf86-video-vmware.

Esta solução funciona apenas para VMs do VirtualBox e editando manualmente o arquivo BugChecker.dat:

vm_screen

  • No Symbol Loader, defina manualmente a largura e a altura do framebuffer para a resolução máxima possível (ou seja, as dimensões da tela do seu computador). Defina o stride como 0.
  • O arquivo BugChecker.dat é criado pelo Symbol Loader em "C:\Windows\BugChecker".
  • A configuração vm_screen deve ser adicionada em "settings->framebuffer".
  • A hierarquia das configurações neste arquivo é determinada pelos caracteres de tabulação (não espaços).
  • O formato da configuração é Command_Buffer_Start_Address (vírgula) Command_Buffer_End_Address (vírgula) I/O_Port_Base
  • IMPORTANTE: Nas configurações da VM, em Display, selecione "VBoxSVGA" como Controlador Gráfico e desmarque "Enable 3D Acceleration".

Este é um recurso experimental. No futuro, esta configuração será adicionada automaticamente pelo Symbol Loader.

Comandos Implementados

O nome e a sintaxe dos comandos foram escolhidos para serem o mais próximos possível dos do SoftICE original para NT:

  • ? expressão-javascript: Avalia uma expressão JavaScript.
  • ADDR eprocess: Alterna para o contexto do processo (retorna o controle ao SO).
  • BC lista|*: Limpa um ou mais breakpoints.
  • BD lista|*: Desabilita um ou mais breakpoints.
  • BE lista|*: Habilita um ou mais breakpoints.
  • BL (sem parâmetros): Lista todos os breakpoints.
  • BPX endereço [-t|-p|-kt thread|-kp processo] [WHEN expressão-js]: Define um breakpoint na execução.
  • CLS (sem parâmetros): Limpa a janela de log.
  • COLOR [normal bold reverse help line]|[reset]: Exibe, define ou redefine as cores da tela.
  • DB/DW/DD/DQ [endereço] [-l tamanho-em-bytes]: Exibe a memória como valores de 8/16/32/64 bits.
  • EB/EW/ED/EQ endereço -v valores-separados-por-espaço: Edita a memória como valores de 8/16/32/64 bits.
  • KL EN|IT: Define o layout do teclado.
  • LINES [num-linhas]: Exibe ou define o número atual de linhas de exibição.
  • MOD [-u|-s] [string-busca]: Exibe informações do módulo.
  • P [RET]: Executa um passo de programa.
  • PAGEIN endereço: Força uma página de memória a ser paginada (retorna o controle ao SO).
  • PROC [string-busca]: Exibe informações do processo.
  • R nome-registrador -v valor: Altera o valor de um registrador.
  • STACK [stack-ptr]: Varre a pilha procurando endereços de retorno.
  • T (sem parâmetros): Rastreia uma instrução.
  • THREAD [-kt thread|-kp processo]: Exibe informações do thread.
  • U endereço|DEST: Desmonta instruções.
  • VER (sem parâmetros): Exibe informações da versão.
  • WD [tamanho-janela]: Alterna a janela do Desmontador ou define seu tamanho.
  • WIDTH [num-colunas]: Exibe ou define o número atual de colunas de exibição.
  • WR (sem parâmetros): Alterna a janela de Registradores.
  • WS [tamanho-janela]: Alterna a janela de Script ou define seu tamanho.
  • X (sem parâmetros): Sai da tela do BugChecker.

Instruções de Compilação

Pré-requisitos

  • Visual Studio 2019
  • Windows Driver Kit 7.1.0

Nota: O WDK deve ser instalado em seu local padrão, ou seja, X:\WinDDK, onde X é a unidade onde os fontes do BugChecker estão salvos.

Um guia passo a passo para compilar o driver de kernel está disponível aqui.

Descrição dos Projetos do Visual Studio

  • BugChecker: este é o driver de kernel do BugChecker, onde a totalidade do depurador é implementada. Os arquivos de saída "Release|x86" e "Release|x64" são incluídos no pacote final. Durante a inicialização, o driver carrega seu arquivo de configuração em "\SystemRoot\BugChecker\BugChecker.dat" (todos os arquivos de símbolo também são armazenados neste diretório) e então tenta localizar "KDCOM.dll" no espaço do kernel. Se encontrado, ele tenta chamar sua função exportada "KdSetBugCheckerCallbacks", interceptando assim KdSendPacket e KdReceivePacket.
  • SymLoader: este é o Symbol Loader. Apenas o arquivo de saída "Release|x86" é incluído no pacote final. O Symbol Loader é usado para alterar a configuração do BugChecker (a configuração é gravada em "\SystemRoot\BugChecker\BugChecker.dat"), para baixar arquivos PDB e para instalar o módulo KDCOM.dll personalizado.
  • KDCOM: este é o módulo KDCOM.dll personalizado que o NTOSKRNL carrega na inicialização do sistema. Ele exporta a função "KdSetBugCheckerCallbacks" que o driver chama para interceptar KdSendPacket e KdReceivePacket.
  • pdb: este é o projeto "pdb" do Ghidra. A versão original gera o conteúdo de um arquivo PDB para a saída padrão em formato xml. O código foi modificado para gerar um arquivo BCS em vez disso.
  • NativeUtil: como o Symbol Loader é um aplicativo WOW64 no Windows x64, as chamadas para as APIs que devem ser feitas a partir de imagens nativas da arquitetura foram movidas para cá (por exemplo, as chamadas para a API de Instalação de Dispositivo e Driver).
  • HttpToHttpsProxy: este é um aplicativo ASP.NET Core cuja função é atuar como um proxy de internet para o Symbol Loader quando executado no Windows XP. Como o XP possui suporte TLS desatualizado, o Symbol Loader não pode baixar arquivos de um servidor de símbolos arbitrário. Após implantar este aplicativo em um IIS na mesma rede, é possível baixar arquivos de um servidor de símbolos no Windows XP prefixando "http://<SEU_ENDERECO_IP_DO_SERVIDOR_IIS>/HttpToHttpsProxy/" à URL do servidor no Symbol Loader.

Créditos

  • VirtualKD: o primeiro POC do BugChecker foi construído modificando o VirtualKD.
  • BazisLib: o código por trás do botão "Copy/Replace Kdcom + Add Boot Entry" no Symbol Loader é do VirtualKD e usa BazisLib.
  • EASTL: Não há como usar a STL do MSVC++ aqui. EASTL é uma excelente alternativa.
  • Ghidra: o projeto "pdb" no BugChecker é do Ghidra. Foi modificado para gerar arquivos BCS.
  • Zydis: para a janela do desmontador no BugChecker.
  • QuickJSPP, que é uma porta do QuickJS para MSVC++: para o motor JavaScript integrado no driver de kernel.
  • ReactOS: para as definições de tipo interno do KD do Windows.
  • SerenityOS: para as funções de manipulação de bitmap de baixo nível usadas pelo alocador de memória do BugChecker. Como comecei o BugChecker depois de ver um vídeo do Andreas (após 10 anos de abstinência de C/C++ e qualquer tipo de programação de baixo nível), queria incluir um pequeno pedaço do SerenityOS no BugChecker.
Baixar ferramenta