
Jormungandr ist eine Kernel-Implementierung eines COFF-Loaders, die es Kernel-Entwicklern ermöglicht, ihre COFFs im Kernel zu laden und auszuführen.
Jormungandr ist eine Kernel-Implementierung eines COFF-Laders, die es Kernel-Entwicklern ermöglicht, ihre COFFs im Kernel zu laden und auszuführen. Der einzige unterstützte COFF-Typ ist ein x64-Kernel-COFF (also ein COFF, das Funktionen von entweder NTOSKRNL oder SSDT verwendet). Dieses Projekt wird nicht unterstützt, wenn VBS aktiviert ist, da es Pools mit Ausführungsberechtigungen verwendet. Dieses Projekt sollte jedoch mit jeder Windows-Version ab Windows 7 funktionieren.
Wenn Sie mit COFF und COFF-Laden nicht vertraut sind, lesen Sie bitte den TrustedSec-Blogbeitrag über COFF-Lader.
Um mit dem Treiber zu kommunizieren, können Sie die Beispieldatei verwenden und mit CMake kompilieren. Dies ist ein Beispiel für die einfachste Verwendung:
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);
// ...
}
Um das vorhandene Beispiel auszuführen, müssen Sie nur Ihr eigenes COFF erstellen oder das Beispiel verwenden:
JormungandrExample.exe example.out

Um ein Kernel-COFF zu schreiben, erstellen Sie eine neue C-Datei und importieren Sie die gewünschten Funktionen wie folgt:
DECLSPEC_IMPORT <FUNCTION_RETURN_TYPE> __cdecl <LIBRARY>$<FUNCTION_NAME>(<PARAMETERS>);
Ersetzen Sie <FUNCTION_RETURN_TYPE> durch den Rückgabetyp der gewünschten Funktion, <LIBRARY> kann entweder ntoskrnl oder ntdll sein, der Rest ist die Signatur der Funktion. Nachdem die Funktion importiert wurde, können Sie sie wie gewohnt beim Schreiben von Code verwenden.
Um das COFF zu erstellen, verwenden Sie mingw mit dem folgenden Befehl:
x86_64-w64-mingw32-gcc -c example.c -o example.out
Um den Client zu kompilieren, müssen Sie CMake und Visual Studio 2022 installieren und dann einfach Folgendes ausführen:
cd <JORMUNGANDR PROJECT DIRECTORY>/Example
mkdir build
cd build
cmake ..
cmake --build .
Um das Projekt zu kompilieren, benötigen Sie die folgenden Werkzeuge:
Klonen Sie das Repository und erstellen Sie den Treiber.
Um es in Ihrer Testumgebung zu testen, führen Sie diese Befehle mit einer erhöhten Eingabeaufforderung aus:
bcdedit /set testsigning on
Erstellen Sie nach dem Neustart einen Dienst und führen Sie den Treiber aus:
sc create nidhogg type= kernel binPath= C:\Path\To\Driver\Nidhogg.sys
sc start nidhogg
Um den Treiber in Ihrer Testumgebung zu debuggen, führen Sie diesen Befehl mit einer erhöhten Eingabeaufforderung aus und starten Sie Ihren Computer neu:
bcdedit /debug on
Nach dem Neustart können Sie die Debug-Meldungen in Tools wie DebugView sehen.
Vielen Dank an alle, die zu diesem Projekt beigetragen haben: