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
SysWhispers — Evasión de AV/EDR mediante llamadas directas al sistema. | Kitploit
Herramientas/GitHubGitHub/jthuraisamy/syswhispers
ExplotaciónEvasión de IDS/IPSShellcodePruebas de PenetraciónRed TeamingDesarrollo de Payloads
GitHubjthuraisamy/syswhispers

SysWhispers

Evasión de AV/EDR mediante llamadas directas al sistema.

Ver Repositorio
2.0k2778hace 5 añosRevisado por Kitploit

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

SysWhispers

SysWhispers ayuda a evadir generando archivos de cabecera/ASM que los implantes pueden usar para realizar llamadas directas al sistema.

Todas las syscalls principales son compatibles desde Windows XP hasta Windows 10 19042 (20H2). Los archivos generados de ejemplo están disponibles en la carpeta example-output/.

Introducción

Varios productos de seguridad colocan hooks en las API de modo usuario que les permiten redirigir el flujo de ejecución a sus motores y detectar comportamientos sospechosos. Las funciones en ntdll.dll que realizan las syscalls consisten en solo unas pocas instrucciones en ensamblador, por lo que reimplementarlas en su propio implante puede evitar la activación de esos hooks de productos de seguridad. Esta técnica fue popularizada por @Cn33liz y su publicación en blog tiene más detalles técnicos que vale la pena leer.

SysWhispers proporciona a los red teamers la capacidad de generar pares de cabecera/ASM para cualquier llamada al sistema en la imagen del núcleo del kernel (ntoskrnl.exe) en cualquier versión de Windows a partir de XP. Los encabezados también incluirán las definiciones de tipos necesarias.

La principal diferencia de implementación entre esto y el POC de Dumpert es que esto no llama a RtlGetVersion para consultar la versión del SO, sino que lo hace en el ensamblador consultando el PEB directamente. El beneficio es poder llamar a una función que soporte múltiples versiones de Windows en lugar de llamar a múltiples funciones, cada una soportando una versión.

Descargar herramienta

Instalación

root@kitploit:~
> git clone https://github.com/jthuraisamy/SysWhispers.git
> cd SysWhispers
> pip3 install -r .\requirements.txt
> py .\syswhispers.py --help

Uso y Ejemplos

Líneas de Comando

root@kitploit:~
# Export all functions with compatibility for all supported Windows versions (see example-output/).
py .\syswhispers.py --preset all -o syscalls_all

# Export just the common functions with compatibility for Windows 7, 8, and 10.
py .\syswhispers.py --preset common -o syscalls_common

# Export NtProtectVirtualMemory and NtWriteVirtualMemory with compatibility for all versions.
py .\syswhispers.py --functions NtProtectVirtualMemory,NtWriteVirtualMemory -o syscalls_mem

# Export all functions with compatibility for Windows 7, 8, and 10.
py .\syswhispers.py --versions 7,8,10 -o syscalls_78X

Salida del Script

root@kitploit:~
PS C:\Projects\SysWhispers> py .\syswhispers.py --preset common --out-file syscom

  ,         ,       ,_ /_   .  ,   ,_    _   ,_   ,
_/_)__(_/__/_)__/_/_/ / (__/__/_)__/_)__(/__/ (__/_)__
      _/_                         /
     (/                          /   @Jackson_T, 2019

SysWhispers: Why call the kernel when you can whisper?

Common functions selected.

Complete! Files written to:
        syscom.asm
        syscom.h

Ejemplo de Antes y Después de la Inyección DLL Clásica con CreateRemoteThread

root@kitploit:~
py .\syswhispers.py -f NtAllocateVirtualMemory,NtWriteVirtualMemory,NtCreateThreadEx -o syscalls
root@kitploit:~
#include <Windows.h>

void InjectDll(const HANDLE hProcess, const char* dllPath)
{
    LPVOID lpBaseAddress = VirtualAllocEx(hProcess, NULL, strlen(dllPath), MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
    LPVOID lpStartAddress = GetProcAddress(GetModuleHandle(L"kernel32.dll"), "LoadLibraryA");
	
    WriteProcessMemory(hProcess, lpBaseAddress, dllPath, strlen(dllPath), nullptr);
    CreateRemoteThread(hProcess, nullptr, 0, (LPTHREAD_START_ROUTINE)lpStartAddress, lpBaseAddress, 0, nullptr);
}
root@kitploit:~
#include <Windows.h>
#include "syscalls.h" // Import the generated header.

void InjectDll(const HANDLE hProcess, const char* dllPath)
{
    HANDLE hThread = NULL;
    LPVOID lpAllocationStart = nullptr;
    SIZE_T szAllocationSize = strlen(dllPath);
    LPVOID lpStartAddress = GetProcAddress(GetModuleHandle(L"kernel32.dll"), "LoadLibraryA");
	
    NtAllocateVirtualMemory(hProcess, &lpAllocationStart, 0, (PULONG)&szAllocationSize, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
    NtWriteVirtualMemory(hProcess, lpAllocationStart, (PVOID)dllPath, strlen(dllPath), nullptr);
    NtCreateThreadEx(&hThread, GENERIC_EXECUTE, NULL, hProcess, lpStartAddress, lpAllocationStart, FALSE, 0, 0, 0, nullptr);
}

Funciones Comunes

Usar el interruptor --preset common creará un par de cabecera/ASM con las siguientes funciones:

Haga clic para expandir la lista de funciones.
  • NtCreateProcess (CreateProcess)
  • NtCreateThreadEx (CreateRemoteThread)
  • NtOpenProcess (OpenProcess)
  • NtOpenThread (OpenThread)
  • NtSuspendProcess
  • NtSuspendThread (SuspendThread)
  • NtResumeProcess
  • NtResumeThread (ResumeThread)
  • NtGetContextThread (GetThreadContext)
  • NtSetContextThread (SetThreadContext)
  • NtClose (CloseHandle)
  • NtReadVirtualMemory (ReadProcessMemory)
  • NtWriteVirtualMemory (WriteProcessMemory)
  • NtAllocateVirtualMemory (VirtualAllocEx)
  • NtProtectVirtualMemory (VirtualProtectEx)
  • NtFreeVirtualMemory (VirtualFreeEx)
  • NtQuerySystemInformation (GetSystemInfo)
  • NtQueryDirectoryFile
  • NtQueryInformationFile
  • NtQueryInformationProcess
  • NtQueryInformationThread
  • NtCreateSection (CreateFileMapping)
  • NtOpenSection
  • NtMapViewOfSection
  • NtUnmapViewOfSection
  • NtAdjustPrivilegesToken (AdjustTokenPrivileges)
  • NtDeviceIoControlFile (DeviceIoControl)
  • NtQueueApcThread (QueueUserAPC)
  • NtWaitForMultipleObjects (WaitForMultipleObjectsEx)

Importar en Visual Studio

  1. Copie los archivos H/ASM generados en la carpeta del proyecto.
  2. En Visual Studio, vaya a Proyecto → Personalizaciones de compilación... y habilite MASM.
  3. En el Explorador de soluciones, agregue los archivos .h y .asm al proyecto como archivos de encabezado y fuente, respectivamente.
  4. Vaya a las propiedades del archivo ASM y establezca el Tipo de elemento en Microsoft Macro Assembler.
  5. Asegúrese de que la plataforma del proyecto esté configurada en x64. Los proyectos de 32 bits no son compatibles en este momento.

Advertencias y Limitaciones

  • Solo se admite Windows de 64 bits en este momento.
  • Las llamadas al sistema desde el subsistema gráfico (win32k.sys) no son compatibles.
  • Probado en Visual Studio 2019 (v142) con Windows 10 SDK.

Solución de Problemas

  • Error ModuleNotFoundError en el script de Python.
    • Asegúrese de que los módulos requeridos estén instalados con pip3 install -r requirements.txt.
  • Errores de redefinición de tipos: un proyecto puede no compilar si los typedefs en syscalls.h ya han sido definidos.
    • Asegúrese de que solo se incluyan las funciones necesarias (es decir, rara vez es necesario --preset all).
    • Si un typedef ya está definido en otro encabezado utilizado, entonces podría eliminarse de syscalls.h.

Créditos

Este script fue desarrollado por @Jackson_T pero se basa en el trabajo de muchos otros:

  • @j00ru por mantener los números de syscall en formatos legibles por máquina.
  • @FoxHex0ne por catalogar muchos prototipos de funciones y typedefs en un formato legible por máquina.
  • @PetrBenes, el equipo de NTInternals.net y MSDN por prototipos y typedefs adicionales.
  • @Cn33liz por la implementación inicial del POC Dumpert.

Agradecimientos especiales a @Dcept905 por las pruebas y sugerencias.

Artículos y Proyectos Relacionados

  • @0x00dtm: Userland API Monitoring and Code Injection Detection
  • @0x00dtm: Defeating Userland Hooks (ft. Bitdefender) (Código)
  • @Cn33liz: Combining Direct System Calls and sRDI to bypass AV/EDR (Código)
  • @mrgretzky: Defeating Antivirus Real-time Protection From The Inside
  • @SpecialHoang: Bypass EDR’s memory protection, introduction to hooking (Código)
  • @xpn y @domchell: Silencing Cylance: A Case Study in Modern EDRs
  • @mrjefftang: Universal Unhooking: Blinding Security Software (Código)
  • @spotheplanet: Full DLL Unhooking with C++
  • @hasherezade: Floki Bot and the stealthy dropper
  • @hodg87: Latest Trickbot Variant has New Tricks Up Its Sleeve
  • @hodg87: Malware Mitigation when Direct System Calls are Used

Licencia

Este proyecto está licenciado bajo la Licencia Apache 2.0.