
Jormungandr é uma implementação em kernel de um carregador de COFF, permitindo que desenvolvedores de kernel carreguem e executem seus COFFs no kernel.
Jormungandr é uma implementação em kernel de um carregador de COFF, permitindo que desenvolvedores de kernel carreguem e executem seus COFFs no kernel. O único tipo de COFF suportado é um COFF de kernel x64 (ou seja, um COFF que usa funções do NTOSKRNL ou SSDT). Este projeto não é suportado para execução com VBS habilitado porque utiliza pools com permissões de execução, mas este projeto deve funcionar em qualquer versão do Windows a partir do Windows 7.
Se você não está familiarizado com COFF e carregamento de COFF, consulte a publicação do blog da TrustedSec sobre carregadores de COFF.
Para se comunicar com o driver, você pode usar e compilar o arquivo de exemplo com CMake. Este é um exemplo do uso mais básico:
int main() {
HANDLE hDrv = CreateFile(DRIVER_NAME, GENERIC_WRITE | GENERIC_READ, 0, nullptr, OPEN_EXISTING, 0, nullptr);
// ...
BOOL result = WriteFile(hDrv, &data, sizeof(data), &bytesWritten, NULL);
// ...
}
Para executar e rodar o exemplo existente, tudo o que você precisa fazer é criar seu próprio COFF ou usar o exemplo:
JormungandrExample.exe example.out

Para escrever um COFF de kernel, crie um novo arquivo C e importe as funções que deseja da seguinte forma:
DECLSPEC_IMPORT <FUNCTION_RETURN_TYPE> __cdecl <LIBRARY>$<FUNCTION_NAME>(<PARAMETERS>);
Substitua <FUNCTION_RETURN_TYPE> pelo tipo de retorno da função desejada; <LIBRARY> pode ser ntoskrnl ou ntdll; o restante é a assinatura da função. Após a importação da função, você pode usá-la da maneira que está acostumado a escrever código.
Para compilar o COFF, use mingw com o seguinte comando:
x86_64-w64-mingw32-gcc -c example.c -o example.out
Para compilar o cliente, você precisará ter o CMake e o Visual Studio 2022 instalados e então basta executar:
cd <JORMUNGANDR PROJECT DIRECTORY>/Example
mkdir build
cd build
cmake ..
cmake --build .
Para compilar o projeto, você precisará das seguintes ferramentas:
Clone o repositório e compile o driver.
Para testar em seu ambiente de testes, execute estes comandos com o cmd elevado:
bcdedit /set testsigning on
Após reiniciar, crie um serviço e execute o driver:
sc create nidhogg type= kernel binPath= C:\Path\To\Driver\Nidhogg.sys
sc start nidhogg
Para depurar o driver em seu ambiente de testes, execute este comando com o cmd elevado e reinicie o computador:
bcdedit /debug on
Após a reinicialização, você pode ver as mensagens de depuração em ferramentas como o DebugView.
Muito obrigado a todas as pessoas que contribuíram com este projeto: