> Windows Syscalls
Volver al blog

Bienvenido — syscalls directos 101

Por qué importan los syscalls directos, qué es un SSN, y cómo Hell's Gate los resuelve en runtime.

Publicado el 2026-05-20·1 min de lecturaintrosyscallsntdll

Cuando un proceso de Windows llama a VirtualAllocEx, la llamada pasa por kernel32.dll, luego por NtAllocateVirtualMemory en ntdll.dll, que ejecuta una instrucción syscall con el System Service Number (SSN) cargado en eax. El kernel lee eax, busca la rutina en KiServiceTable y despacha.

Los productos EDR suelen hookear los exports user-mode de ntdll. Un syscall directo evita ese hook emitiendo la instrucción syscall desde tu propio código con el SSN correcto.

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

Lo complicado: el SSN cambia entre builds de Windows. Tres soluciones comunes:

  1. Hardcodeado por build — frágil.
  2. Hell's Gate — en runtime, leer los primeros bytes de ntdll!NtAllocateVirtualMemory y extraer el SSN del mov eax, imm32.
  3. Halo's Gate — fallback cuando ntdll mismo está hookeado: recorrer syscalls vecinos para deducir el SSN faltante.

Explora la referencia de syscalls para ver los SSN por build de cada llamada Nt* documentada.