
Jormungandr es una implementación de kernel de un cargador COFF, que permite a los desarrolladores de kernel cargar y ejecutar sus COFFs en el kernel.
Jormungandr es una implementación en kernel de un cargador COFF, que permite a los desarrolladores de kernel cargar y ejecutar sus COFF en el kernel. El único tipo de COFF soportado es un COFF de kernel x64 (es decir, un COFF que utilice funciones de NTOSKRNL o SSDT). Este proyecto no es compatible para ejecutarse con VBS habilitado porque utiliza pools con permisos de ejecución, pero este proyecto debería funcionar en cualquier versión de Windows a partir de Windows 7.
Si no estás familiarizado con COFF y la carga de COFF, consulta la publicación del blog de TrustedSec sobre cargadores COFF.
Para comunicarte con el driver, puedes usar y compilar el archivo example con CMake. Este es un ejemplo del uso más 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 ejecutar el ejemplo existente, todo lo que tienes que hacer es crear tu propio COFF o usar el example:
JormungandrExample.exe example.out

Para escribir un COFF de kernel, crea un nuevo archivo C e importa las funciones que quieras de la siguiente manera:
DECLSPEC_IMPORT <FUNCTION_RETURN_TYPE> __cdecl <LIBRARY>$<FUNCTION_NAME>(<PARAMETERS>);
Reemplaza <FUNCTION_RETURN_TYPE> con el tipo de retorno de la función que quieras; <LIBRARY> puede ser ntoskrnl o ntdll; el resto es la firma de la función. Una vez importada la función, puedes usarla de la forma habitual al escribir código.
Para compilar el COFF, usa mingw con el siguiente comando:
x86_64-w64-mingw32-gcc -c example.c -o example.out
Para compilar el cliente, necesitarás tener instalados CMake y Visual Studio 2022 y luego solo ejecuta:
cd <JORMUNGANDR PROJECT DIRECTORY>/Example
mkdir build
cd build
cmake ..
cmake --build .
Para compilar el proyecto, necesitarás las siguientes herramientas:
Clona el repositorio y compila el driver.
Para probarlo en tu entorno de pruebas, ejecuta estos comandos con cmd elevado:
bcdedit /set testsigning on
Después de reiniciar, crea un servicio y ejecuta el driver:
sc create nidhogg type= kernel binPath= C:\Path\To\Driver\Nidhogg.sys
sc start nidhogg
Para depurar el driver en tu entorno de pruebas, ejecuta este comando con cmd elevado y reinicia tu equipo:
bcdedit /debug on
Después del reinicio, puedes ver los mensajes de depuración en herramientas como DebugView.
Muchas gracias a las personas que contribuyeron a este proyecto: