> Windows Syscalls
Zurück zum Blog

Willkommen — direkte Syscalls 101

Warum direkte Syscalls wichtig sind, was ein SSN ist und wie Hell's Gate sie zur Laufzeit auflöst.

Veröffentlicht am 2026-05-20·1 Min. Lesezeitintrosyscallsntdll

Wenn ein Windows-Prozess VirtualAllocEx aufruft, läuft der Aufruf durch kernel32.dll, dann durch NtAllocateVirtualMemory in ntdll.dll, das eine syscall-Instruktion mit der System Service Number (SSN) in eax ausführt. Der Kernel liest eax, sucht die Routine in der KiServiceTable und dispatcht.

EDR-Produkte hooken üblicherweise die User-Mode-Exporte von ntdll. Ein direkter Syscall umgeht diesen Hook, indem die syscall-Instruktion aus dem eigenen Code mit der richtigen SSN ausgeführt wird.

NtAllocateVirtualMemory:
    mov r10, rcx
    mov eax, 0x18      ; SSN ab Win10 1909
    syscall
    ret

Der Haken: Die SSN ändert sich zwischen Windows-Builds. Drei gängige Ansätze:

  1. Hardcodiert pro Build — fragil.
  2. Hell's Gate — zur Laufzeit die ersten Bytes von ntdll!NtAllocateVirtualMemory lesen und die SSN aus dem mov eax, imm32 extrahieren.
  3. Halo's Gate — Fallback, wenn ntdll selbst gehookt ist: über Nachbar-Syscalls die fehlende SSN herleiten.

In der Syscall-Referenz sehen Sie die SSNs pro Build für jeden dokumentierten Nt*-Aufruf.