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:
- Hardcodeado por build — frágil.
- Hell's Gate — en runtime, leer los primeros bytes de
ntdll!NtAllocateVirtualMemoryy extraer el SSN delmov eax, imm32. - Halo's Gate — fallback cuando
ntdllmismo 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.