Jormungandr 是 COFF 加载器的内核实现,允许内核开发人员在内核中加载和执行他们的 COFF。 唯一支持的 COFF 类型是 x64 内核 COFF(即使用 NTOSKRNL 或 SSDT 中函数的 COFF)。本项目不支持在启用 VBS 的情况下运行,因为它使用了具有执行权限的内存池,但该项目应适用于从 Windows 7 开始的任何 Windows 版本。
如果你不熟悉 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

要编写内核 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 .
要编译该项目,你需要以下工具:
克隆仓库并构建驱动程序。
要在测试环境中进行测试,请使用提升权限的 cmd 运行以下命令:
bcdedit /set testsigning on
重新启动后,创建服务并运行驱动程序:
sc create nidhogg type= kernel binPath= C:\Path\To\Driver\Nidhogg.sys
sc start nidhogg
要在测试环境中调试驱动程序,请使用提升权限的 cmd 运行此命令并重新启动计算机:
bcdedit /debug on
重新启动后,你可以在 DebugView 等工具中查看调试消息。
非常感谢为该项目做出贡献的人们: