
Jormungandr は COFF ローダーのカーネル実装であり、カーネル開発者がカーネル内で COFF をロードして実行できるようにします。
Jormungandr は、カーネル開発者がカーネル内でCOFFをロードして実行できるようにする、COFFローダーのカーネル実装です。 唯一サポートされているCOFFの種類は、x64カーネルCOFF(つまり、NTOSKRNLまたはSSDTの関数を使用するCOFF)です。 このプロジェクトは、実行権限を持つプールを使用しているため、VBSを有効にした状態での実行はサポートされていませんが、Windows 7以降のすべてのWindowsバージョンで動作するはずです。
COFFとCOFFローディングに詳しくない場合は、TrustedSecのCOFFローダーに関するブログ記事を参照してください。
ドライバーと通信するには、example ファイルを 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

カーネル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 などのツールでデバッグメッセージを確認できます。
このプロジェクトに貢献してくださった皆様に感謝します: