
masm32 kernel programming, drivers, tutorials, examples, and tools (credits Four-F)
Repositório do Dreg para as suas próprias necessidades
programação de kernel masm32, drivers, tutoriais, exemplos e ferramentas (créditos Four-F)
Neste momento, um .sys é criado em C:\
carregar driver:
w2k_load.exe ou osrloader.exe apresentam um erro ao carregar beeper.sys, apenas ignore-o.
Esse erro é gerado pelo próprio código do driver quando ele termina a sua própria execução (com esse truque você não precisa descarregá-lo)
mov eax, STATUS_DEVICE_CONFIGURATION_ERROR
ret
Então, se beep.sys estiver carregado corretamente no kernel, você deve ouvir um bipe nos seus alto-falantes (o código do driver gera um bipe)
Quando precisar descarregar um driver, use:
Eu modifiquei o w2k_load.exe do Sven B. Schreiber para funcionar do Windows 2000 ao Windows 10 (manifesto...)
descompacte osrloaderv30.zip e use este programa GUI:
para Windows mais antigos, basta usar o DbgView.exe anexado neste repositório. Aliás, eu o modifiquei (manifesto...)
Para Windows modernos, use o dbgview.exe mais recente do site da Sysinternals e verifique isto para solução de problemas:
Leia os arquivos .pdf neste repositório e veja os exemplos no diretório KmdKit18/examples
AVISO: TODO o código-fonte ASM está dentro de arquivos .bat (código batch + asm misturados no mesmo arquivo)
Exemplo com advanced\FindShadowTable\FindShadowTable.bat
;@echo off
;goto make
ASM DRIVER CODE GOES HERE
:make
set drv=FindShadowTable
\masm32\bin\ml /nologo /c /coff %drv%.bat
\masm32\bin\link /nologo /driver /base:0x10000 /align:32 /out:%drv%.sys /subsystem:native %drv%.obj
del %drv%.obj
echo.
pause
Este arquivo contém código BATCH que gera um .sys e também contém o próprio código-fonte do driver. Então, sim, é muito complicado; o script de compilação e o código-fonte estão juntos.
Este é um exemplo de como encontrar ServiceDescriptorTableShadow.
Ele apenas examina threads com ID 80h-400h tentando encontrar uma thread cujo KTHREAD.ServiceTable não seja igual a KeServiceDescriptorTable. Se tal thread for encontrada, seu KTHREAD.ServiceTable contém o endereço de ServiceDescriptorTableShadow.
Observe a saída de depuração do driver com o DbgView (www.sysinternals.com) ou use o SoftICE.
Testado em: Windows 2000, XP e Server 2003.
Este é um exemplo de um simples driver de filtro de teclado PS/2 legado (não PnP). AVISO: Você não conseguirá anexá-lo à pilha de teclado USB.
Testado em: Windows 2000, XP e Server 2003.
Four-F, [email protected] arquivos de macro são do meu pacote cocomac.
Este é um exemplo de um simples driver de filtro de mouse PS/2 legado (não PnP). AVISO: Você não conseguirá anexá-lo à pilha de mouse USB.
Testado em: Windows 2000, XP e Server 2003.
Este é um exemplo de como aplicar configurações de segurança específicas a um objeto de dispositivo nomeado chamando IoCreateDeviceSecure em vez de IoCreateDevice.
Como a rotina IoCreateDeviceSecure não faz parte do sistema operacional, vinculamos wdmsec.lib, que contém todas as rotinas necessárias.
A biblioteca wdmsec.lib que você encontrará aqui não é a que acompanha o DDK. Tive que reconstruí-la para reduzir seu tamanho, removendo membros desnecessários.
Este é um exemplo de como criar, gravar, ler e excluir o arquivo.
Use o KmdManager para registrar/cancelar o registro e iniciá-lo. Observe sua saída de depuração com o DbgView (www.sysinternals.com) ou use o SoftICE.
Testado em: Windows 2000, XP e Server 2003.
Este é um exemplo de como empacotar o driver em recursos.
Testado em: Windows 2000, XP e Server 2003.
A maneira de saber se o sistema está sendo executado em modo de segurança ou não.
Use o KmdManager para registrar/cancelar o registro e iniciá-lo. Observe sua saída de depuração com o DbgView (www.sysinternals.com) ou use o SoftICE.
Testado em: Windows 2000, XP e Server 2003.
basic/MemoryWorks/LookasideList
Este é um exemplo de como usar lookaside list e lista duplamente vinculada para gerenciar os blocos de memória alocados a partir da lookaside list.
Use o KmdManager para registrar/cancelar o registro e iniciar/parar. Observe sua saída de depuração com o DbgView (www.sysinternals.com) ou use o SoftICE.
Testado em: Windows 2000, XP e Server 2003.
Este é um exemplo de como lidar com exceções usando SEH. Mas lembre-se. VOCÊ NÃO PODE LIDAR COM TODAS AS EXCEÇÕES COM SEH EM MODO KERNEL !
Use o KmdManager para registrar/cancelar o registro e iniciar/parar. Observe sua saída de depuração com o DbgView (www.sysinternals.com) ou use o SoftICE.
Testado em: Windows 2000, XP e Server 2003.
basic/MemoryWorks/SharedSection
Este é um exemplo de como usar um objeto de seção nomeado para compartilhar memória entre um processo em modo de usuário e um driver em modo kernel.
Testado em: Windows 2000, XP e Server 2003.
basic/MemoryWorks/SharingMemory
Este é um exemplo de uma possível maneira de compartilhar o buffer de memória entre o modo de usuário e o modo kernel.
Testado em: Windows 2000, XP e Server 2003.
basic/MemoryWorks/SystemModules
Este é um exemplo de como alocar memória em modo kernel. Para não alocá-la inutilmente, nós a preenchemos com algumas informações do sistema.
Use o KmdManager para registrar/cancelar o registro e iniciar/parar. Observe sua saída de depuração com o DbgView (www.sysinternals.com) ou use o SoftICE.
Testado em: Windows 2000, XP e Server 2003.
Este é um exemplo de como criar, definir, ler e excluir a chave de registro. Use o KmdManager para registrar/cancelar o registro e iniciá-lo. Observe sua saída de depuração com o DbgView (www.sysinternals.com) ou use o SoftICE.
Testado em: Windows 2000, XP e Server 2003.
Este é um exemplo de como colocar código em diferentes seções PE.
basic/Synchronization/MutualExclusion
Este é um exemplo de como implementar acesso mutuamente exclusivo ao recurso.
Use o KmdManager para registrar/cancelar o registro e iniciar/parar. Observe sua saída de depuração com o DbgView (www.sysinternals.com) ou use o SoftICE.
[basic/Synchronization/SharedEvent - ProcessMon](KmdKit18/examples/basic/Synchronization/SharedEvent - ProcessMon)
Este é um exemplo de como notificar o modo de usuário sobre algum tipo de evento que ocorreu.
Testado em: Windows 2000, XP e Server 2003.
basic/Synchronization/TimerWorks
Este é um exemplo de como criar, definir, aguardar e cancelar o temporizador. Use o KmdManager para registrar/cancelar o registro e iniciar/parar. Observe sua saída de depuração com o DbgView (www.sysinternals.com) ou use o SoftICE.
Testado em: Windows 2000, XP e Server 2003.
Exemplo de WorkItem
Neste exemplo, lidamos com um dispositivo de disco existente.
Testado em: Windows 2000, XP & Server 2003
Fornece informações sobre as características de cada partição de disco.
Testado em: Windows 2000, XP & Server 2003
Neste exemplo, lidamos com um dispositivo de disco existente.
Testado em: Windows 2000, XP & Server 2003
Neste exemplo, lidamos com um dispositivo de teclado existente.
Testado em: Windows 2000, XP & Server 2003
Neste exemplo, lidamos com um dispositivo de teclado existente. Este exemplo oferece parte da funcionalidade padrão do applet do Painel de Controle -> Teclado.
Testado em: Windows 2000, XP & Server 2003
Ler o MBR do modo de usuário é a coisa mais fácil de fazer se você souber de qual dispositivo ler.
Testado em: Windows 2000, XP & Server 2003
Neste exemplo, lidamos com um dispositivo serial existente.
Testado em: Windows 2000, XP & Server 2003
Este é um exemplo de como usar algumas das funções de dispositivo de setup. Enumera todos os dispositivos de disco disponíveis e obtém a propriedade do dispositivo. Execute-o a partir da linha de comando.
Testado em: Windows 2000, XP & Server 2003
Como emitir um bipe com o alto-falante do sistema.
Testado em: Windows NT4.0+sp6, 2000, XP & Server 2003
Fornece acesso direto de E/S de porta a um processo em modo de usuário Baseado no artigo e no código-fonte C de Dale Roberts.
Testado em: Windows 2000, XP & Server 2003
Este é um exemplo de como encontrar a base de ntoskrnl.exe.
Use o KmdManager para registrar/cancelar o registro e iniciar/parar. Observe sua saída de depuração com o DbgView (www.sysinternals.com) ou use o SoftICE.
Testado em: Windows 2000, XP & Server 2003
Demonstra a comunicação do driver com ReadFile, sem usar nenhum dos métodos. E como usar SEH no ring0.
Testado em: Windows 2000, XP & Server 2003
O driver de modo kernel mais simples possível que absolutamente não faz nada.
Testado em: Windows 2000, XP & Server 2003
O código esqueleto para um driver de dispositivo de modo kernel do Windows NT.
Testado em: Windows 2000, XP & Server 2003
Demonstra a comunicação do driver com DeviceIoControl, usando o método com buffer. E como traduzir endereços virtuais.
Testado em: Windows 2000, XP & Server 2003
Este exemplo permite que você saiba o IRQL e o contexto de Processo/Thread em que as rotinas principais do driver estão sendo executadas. Use o DebugView (www.sysinternals.com) para observar sua saída.
Testado em: Windows 2000, XP & Server 2003
Documentação do Windows Driver Kit (WDK) versão 7.1.0: https://www.microsoft.com/en-us/download/details.aspx?id=11800
Documentação do WDK: https://learn.microsoft.com/en-us/windows-hardware/drivers/download-the-wdk
Manual do desenvolvedor de software das Arquiteturas Intel 64 e IA-32, volumes combinados: 1, 2A, 2B, 2C, 2D, 3A, 3B, 3C, 3D e 4
Vazamento do código-fonte do Windows 2003, WRK, CRK ...
Livro Undocumented Windows NT por Prasad Dabak, Sandeep Phadke e Milind Borate
Livro Windows Kernel Programming por Pavel Yosifovich
Livros Windows Internals por Mark Russinovich, David A. Solomon e outros
(livro) The Rootkit Arsenal 2ª ed. por Bill Blunden
(livro) What Makes It Page?: The Windows 7 (x64) Virtual Memory Manager por Enrico Martignetti
(livro) Subverting the Windows Kernel
(livro) Rootkits and Bootkits: Reversing Modern Malware and Next Generation Threats
osdev (comunidade para pessoas interessadas em desenvolvimento de sistemas operacionais)
github/gist aleatórios, OSR, phrack, uninformed, openrce, kernelmode, rootkit.com, arteam...