Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
stealth_call — Biblioteca de syscall indirectas para Windows x64 de solo cabecera. Zero CRT, zero IAT, VEH anti-BP, bypass de AMSI/ETW, memoria W^X, stubs dinámicos por llamada. | Kitploit
Herramientas/GitHubGitHub/share-devn/stealth_call
Escalada de PrivilegiosForensia de MemoriaExplotaciónEvasión de IDS/IPSShellcodePost-ExplotaciónRed TeamingDesarrollo de Payloads
GitHubshare-devn/stealth_call

stealth_call

Biblioteca de syscall indirectas para Windows x64 de solo cabecera. Zero CRT, zero IAT, VEH anti-BP, bypass de AMSI/ETW, memoria W^X, stubs dinámicos por llamada.

Ver Repositorio
7hace 4 mesesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

stealth_call


¿Qué es esto?

Biblioteca de solo encabezado para Windows x64 que te permite invocar cualquier syscall de NT sin tocar las importaciones de ntdll, sin dejar cadenas en tu binario, y sin las banderas rojas habituales que hacen que los EDR pierdan la cabeza.

Sin CRT. Sin STL. Sin IAT. Todo se compila a ~19KB con literalmente cero dependencias de DLL.

Construida para evitar los errores comunes de las bibliotecas de syscall existentes: cadenas en texto plano, constantes hash conocidas, syscall directa desde memoria que no es de ntdll, importaciones IAT que gritan "estoy haciendo algo raro", IOC de SEC_NO_CHANGE, hinchazón de CRT. Nada de eso aquí.


Características

Motor de Syscall

  • Syscalls indirectas: los stubs saltan al propio gadget syscall; ret de ntdll, por lo que RIP siempre está dentro de ntdll cuando se ejecuta la instrucción syscall
  • Generación de stub por llamada: cada invocación construye un stub nuevo con basura aleatoria, diseño aleatorio, número de syscall XOReado. Nada se reutiliza
  • Aplicación de W^X: las páginas temporales pasan RW → RX → RW. Nunca se asigna RWX, punto
  • Los stubs se borran inmediatamente después de cada llamada
  • Las syscalls se extraen del mapeo de sección \KnownDlls\ntdll.dll (sin acceso al sistema de archivos, invisible para ProcMon)
  • 977 syscalls resueltas en un sistema Windows 11 típico

Anti-Breakpoint

  • Enfoque basado en VEH: si un depurador coloca un 0xCC en tu función objetivo, el manejador de excepción restaura silenciosamente el byte original, ejecuta la instrucción en modo de paso único, luego vuelve a colocar el breakpoint. El depurador nunca se entera de que fue evadido. Ventana de tiempo cero
  • Funciona en cualquier función de cualquier DLL, no solo de ntdll

Evasión

  • Bypass de AMSI: parchea AmsiScanBuffer para que devuelva S_OK
  • Bypass de ETW: parchea EtwEventWrite para que devuelva SUCCESS
  • Todo el parcheo se realiza mediante syscalls directas, no VirtualProtect
  • Cadenas cifradas con XOR en todas partes: nombres de DLL, rutas, todo. Descifradas en pila, borradas después de su uso
  • Algoritmo hash personalizado (no FNV-1a, no CRC32 — sin firmas YARA conocidas)
  • Recorrido de PEB para toda resolución de módulos/funciones — sin GetModuleHandle, sin GetProcAddress

Calidad del Código

  • Solo encabezado, coloca la carpeta stealth/ en tu proyecto y funciona
  • Seguro para hilos mediante páginas temporales por hilo + spinlocks
  • Limpieza completa al cerrar: páginas temporales liberadas, mapas puestos a cero, VEH eliminado
  • Detección de hooks para trampolines comunes de EDR (jmp rel32, jmp [rip], mov rax + jmp rax)

Cómo Funciona

flujo

Ruta de Syscall

  1. initialize() abre ntdll a través de la sección \KnownDlls, analiza las exportaciones PE, obtiene todos los números de syscall
  2. Escanea el .text de ntdll en busca de un gadget syscall; ret — aquí es desde donde se ejecutará la instrucción real de syscall
  3. Cuando llamas a sc::invoke():
    • Busca la entrada de syscall por hash
    • Obtiene la página temporal del hilo actual (o asigna una, solo RW)
    • emit_stub() construye un stub polimórfico único — instrucciones basura aleatorias antes/después, número de syscall ofuscado con XOR usando una clave por llamada, salto indirecto al gadget de ntdll
    • Cambia la página de RW a RX
    • Llama a través del stub
    • Vuelve a cambiar de RX a RW
    • Pone a cero los bytes del stub

En ningún momento existe memoria RWX. En ningún momento se ejecuta una instrucción syscall fuera de ntdll. En ningún momento se almacenan números de syscall en texto plano.

Trampolín VEH

Llamas a tramp::invoke() con la función objetivo. Si no hay breakpoint, la función se ejecuta normalmente sin sobrecarga. Si un depurador colocó 0xCC:

  1. Se dispara la excepción INT3
  2. Nuestro manejador VEH verifica si la dirección está en nuestra tabla (búsqueda por hash, no lineal)
  3. Restaura el byte original desde una copia limpia leída del disco
  4. Activa el Flag de Trap (Trap Flag)
  5. Continúa la ejecución — la instrucción real se ejecuta
  6. Se dispara la excepción de paso único
  7. El manejador vuelve a colocar 0xCC

La lista de breakpoints del depurador aún lo muestra como activo. El breakpoint simplemente nunca se activa en nuestras llamadas.


Compilación

root@kitploit:~
cmake -B build -A x64
cmake --build build --config Release

Necesita MSVC (VS 2019+) y CMake 3.15+. La salida es de ~19KB con cero importaciones.


Uso

Syscalls

root@kitploit:~
#include "stealth/syscall.hpp"

stealth::sc::initialize();

PVOID base = nullptr;
SIZE_T size = 0x1000;
NTSTATUS status = stealth::sc::invoke<NTSTATUS>(
    HASH("NtAllocateVirtualMemory"),
    NtCurrentProcess(), &base, (ULONG_PTR)0, &size,
    (ULONG)(MEM_COMMIT | MEM_RESERVE), (ULONG)PAGE_READWRITE
);

Anti-Breakpoint

root@kitploit:~
#include "stealth/trampoline.hpp"

// funciona incluso si x64dbg tiene un BP en MessageBoxA
int ret = stealth::tramp::invoke<int>(
    HASH_CI("user32.dll"), HASH("MessageBoxA"),
    (HWND)nullptr, (LPCSTR)"hola", (LPCSTR)"título", (UINT)MB_OK
);

AMSI / ETW

root@kitploit:~
#include "stealth/bypass.hpp"

stealth::bypass::patch_etw();
stealth::bypass::patch_amsi();

Limpieza

root@kitploit:~
stealth::tramp::shutdown();
stealth::sc::shutdown();

Estructura del Proyecto

root@kitploit:~
stealth/
  common.hpp      — operaciones de memoria, spinlock, static_map, PRNG, salida de depuración
  hash.hpp        — hash personalizado en tiempo de compilación
  xorstr.hpp      — cifrado de cadenas XOR en tiempo de compilación
  peb.hpp         — recorrido de PEB, analizador de exportaciones PE, detección de hooks
  syscall.hpp     — motor de syscall indirecta, generador de stubs, W^X, anti-dump
  trampoline.hpp  — anti-breakpoint basado en VEH
  bypass.hpp      — parcheo de AMSI + ETW

Licencia

MIT — haz lo que quieras con ello.

Descargar herramienta