
Jormungandr is a kernel implementation of a COFF loader, allowing kernel developers to load and execute their COFFs in the kernel.
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와 같은 도구에서 디버깅 메시지를 확인할 수 있습니다.
이 프로젝트에 기여해 주신 분들께 감사드립니다: