
Jormungandr — это реализация загрузчика COFF в ядре, позволяющая разработчикам ядра загружать и выполнять свои COFF-файлы в пространстве ядра.
Jormungandr — это реализация загрузчика COFF в ядре, позволяющая разработчикам ядра загружать и выполнять свои COFF в ядре. Единственный поддерживаемый тип COFF — это x64 kernel COFF (то есть COFF, который использует функции либо из NTOSKRNL, либо из SSDT). Этот проект не поддерживает работу с включённым VBS, поскольку он использует пулы с правами на выполнение, но проект должен работать на любой версии Windows, начиная с Windows 7.
Если вы не знакомы с COFF и загрузкой COFF, обратитесь к статье TrustedSec о загрузчиках COFF.
Для связи с драйвером вы можете использовать и скомпилировать пример с помощью CMake. Это пример самого базового использования:
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);
// ...
}
Чтобы запустить и выполнить существующий пример, всё, что вам нужно сделать, — это создать собственный COFF или использовать пример:
JormungandrExample.exe example.out

Чтобы написать kernel COFF, создайте новый C-файл и импортируйте нужные функции следующим образом:
DECLSPEC_IMPORT <FUNCTION_RETURN_TYPE> __cdecl <LIBRARY>$<FUNCTION_NAME>(<PARAMETERS>);
Замените <FUNCTION_RETURN_TYPE> на тип возвращаемого значения нужной функции, <LIBRARY> может быть либо ntoskrnl, либо ntdll, остальное — сигнатура функции. После импорта функции вы можете использовать её так, как вы привыкли писать код.
Для сборки COFF используйте mingw следующей командой:
x86_64-w64-mingw32-gcc -c example.c -o example.out
Для компиляции клиента вам потребуется установить CMake и Visual Studio 2022, а затем просто выполнить:
cd <JORMUNGANDR PROJECT DIRECTORY>/Example
mkdir build
cd build
cmake ..
cmake --build .
Для компиляции проекта вам понадобятся следующие инструменты:
Клонируйте репозиторий и соберите драйвер.
Чтобы протестировать его в вашем тестовом окружении, выполните эти команды в командной строке с правами администратора:
bcdedit /set testsigning on
После перезагрузки создайте службу и запустите драйвер:
sc create nidhogg type= kernel binPath= C:\Path\To\Driver\Nidhogg.sys
sc start nidhogg
Чтобы отладить драйвер в вашем тестовом окружении, выполните эту команду в командной строке с правами администратора и перезагрузите компьютер:
bcdedit /debug on
После перезагрузки вы сможете видеть отладочные сообщения в таких инструментах, как DebugView.
Огромное спасибо тем, кто внёс вклад в этот проект: