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
LazyHook — Evasión del análisis de comportamiento mediante la ejecución de código malicioso dentro de pilas de llamadas de Microsoft de confianza, biblioteca de hooking sin parches IAT/EAT. | Kitploit
Herramientas/GitHubGitHub/hwbp/lazyhook
ExplotaciónEvasión de IDS/IPSAnálisis de MalwareAprendizaje y EducaciónRed TeamingAnti-Bot
GitHubhwbp/lazyhook

LazyHook

Evasión del análisis de comportamiento mediante la ejecución de código malicioso dentro de pilas de llamadas de Microsoft de confianza, biblioteca de hooking sin parches IAT/EAT.

Ver Repositorio
14825hace 8 mesesRevisado 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

Resumen

LazyHook es un framework sigiloso de hooking de API que evita los sistemas de prevención de intrusiones de host (HIPS) mediante la suplantación de la pila de llamadas. Al aprovechar los puntos de interrupción de hardware a nivel de CPU y el manejo de excepciones vectorizadas, ejecuta código arbitrario como si se originara en módulos confiables firmados por Microsoft, engañando por completo a los motores de análisis de comportamiento que dependen de la inspección de la pila de llamadas y la verificación del origen del módulo.

Evita el análisis de comportamiento ejecutando código malicioso dentro de pilas de llamadas confiables de Microsoft
Utiliza puntos de interrupción de hardware + VEH para secuestrar funciones legítimas y suplantar orígenes de módulos

El problema: Software de seguridad moderno

Los sistemas de prevención de intrusiones de host (HIPS) y los motores de análisis de comportamiento monitorean las aplicaciones mediante:

  • Análisis de la pila de llamadas: Seguimiento del origen y flujo de las llamadas API
  • Verificación del origen del módulo: Comprobación de si el comportamiento sospechoso se origina en módulos confiables
  • Reconocimiento de patrones de API: Detección de secuencias maliciosas (ej., VirtualAlloc → WriteProcessMemory → CreateRemoteThread)
  • Validación de dirección de retorno: Aseguramiento de que las direcciones de retorno apuntan a secciones de código legítimas

Sistemas como Kaspersky System Watcher, Windows Defender, Cylance y CrowdStrike emplean variaciones de estas técnicas.

La solución: Suplantación de pila de llamadas confiable

Al secuestrar una función en un ensamblado firmado por Microsoft (ej., System.Windows.Forms.dll, user32.dll), podemos ejecutar lógica arbitraria dentro de una pila de llamadas que parece completamente legítima.

Nota: Es posible hacer un JmpHook, que enganchará MsgBox -> y justo después llamará a tu código personalizado. LazyHook no hace eso.

Por qué funciona esto:

  1. La función enganchada está en una DLL de Microsoft confiable y firmada digitalmente
  2. Cuando tu payload se ejecuta, la pila de llamadas muestra el módulo confiable como el llamante
  3. El punto de interrupción de hardware no deja modificaciones en la memoria, por lo que las comprobaciones de integridad pasan

El software de seguridad ve el segundo escenario y piensa: "¿MessageBoxA de user32.dll está llamando a las API de Windows? Eso es comportamiento normal."

Cómo funciona

root@kitploit:~
┌─────────────────────────────────────────────────────────┐
│  1. Llamada a la función objetivo                        │
│     ↓                                                    │
│  2. Se activa el registro de depuración de la CPU (DR0-DR3)│
│     ↓                                                    │
│  3. Se genera EXCEPTION_SINGLE_STEP                      │
│     ↓                                                    │
│  4. El manejador VEH intercepta la excepción             │
│     ↓                                                    │
│  5. La ejecución se redirige a la función hook           │
│     ↓                                                    │
│  6. CallOriginal() desactiva temporalmente el punto de interrupción│
│     ↓                                                    │
│  7. Se ejecuta la función original                       │
│     ↓                                                    │
│  8. Se reactiva el punto de interrupción                 │
└─────────────────────────────────────────────────────────┘

Tipos de hook

Hooking de IAT (Tabla de direcciones de importación)

Intercepta funciones importadas localizando su dirección en la IAT y estableciendo un punto de interrupción de hardware. Esto engancha la importación específica en tu proceso.

root@kitploit:~
HookIAT("user32.dll", "MessageBoxA", HookFunction, &OriginalFunction);

Hooking de EAT (Tabla de direcciones de exportación)

Engancha funciones exportadas globalmente desde una DLL resolviendo su dirección a través de la tabla de exportación. Esto afecta a todas las llamadas a esa exportación.

root@kitploit:~
HookEAT("amsi.dll", "AmsiScanBuffer", HookFunction, &OriginalFunction);

Demostración de Entry.cpp

La demostración incluida muestra tres escenarios prácticos:

1. Hook IAT de MessageBoxA

Demuestra el hooking de IAT interceptando llamadas a MessageBoxA y modificando el mensaje mostrado:

root@kitploit:~
int WINAPI HookMessageBoxA(HWND H, LPCSTR T, LPCSTR C, UINT U)
{
    printf("[*] MessageBoxA hooked!\n");
    return LazyHook::CallOriginal<int>(LazyHook::GetIatState(), H, "Hooked!", ">:)", U);
}

2. Hook EAT de CreateFileA (Ejemplo comentado)

Muestra cómo monitorear operaciones de archivos registrando llamadas a CreateFileA:

root@kitploit:~
HANDLE WINAPI HookCreateFileA(LPCSTR Filename, ...)
{
    printf("[*] CreateFileA hooked: %s\n", Filename);
    return LazyHook::CallOriginal<HANDLE>(...);
}

3. Bypass de AMSI mediante hook de AmsiScanBuffer

Demuestra el bypass del software de seguridad forzando a que todos los escaneos de AMSI devuelvan resultados limpios:

root@kitploit:~
HRESULT WINAPI HookAmsiScanBuffer(...)
{
    printf("[*] AmsiScanBuffer hooked! Bypassing...\n");
    HRESULT OrgResult = LazyHook::CallOriginal<HRESULT>(...);
    (*Result) = AMSI_RESULT_CLEAN;  // Force clean regardless of content
    return OrgResult;
}

La demostración prueba el bypass de AMSI escaneando "Invoke-Mimikatz" (una cadena maliciosa conocida) y muestra que se clasifica como limpio.

Detalles de implementación

Configuración de los registros de depuración

root@kitploit:~
DR7 Layout (Simplified):
- Bits 0,2,4,6: Enable flags for DR0-DR3 (Local Enable)
- Bits 16-31: Breakpoint conditions (Execute, Write, IO, R/W)

El framework configura DR7 para:

  • Habilitar puntos de interrupción de ejecución (00b para condición de ejecución)
  • Establecer longitud de 1 byte para precisión del punto de interrupción

Manejo de excepciones vectorizadas

El manejador VEH:

  1. Comprueba si la excepción es EXCEPTION_SINGLE_STEP
  2. Compara el puntero de instrucción (RIP/EIP) con los hooks registrados
  3. Redirige la ejecución a la función hook si se encuentra una coincidencia
  4. Devuelve EXCEPTION_CONTINUE_EXECUTION para reanudar en el hook

Patrón CallOriginal

root@kitploit:~
template<typename Ret, typename... Args>
Ret CallOriginal(VehHookState* State, Args... args)
{
    RemoveHardwareBreakpoint(State->DrIndex);  // Disable temporarily
    Ret Result = ((FuncType)State->OriginalFunction)(args...);
    SetHardwareBreakpoint(State->OriginalFunction, State->DrIndex);  // Re-enable
    return Result;
}

Ejemplos de casos de uso

1. Bypass de AMSI

La demostración muestra el hooking de AmsiScanBuffer para forzar resultados de escaneo limpios:

root@kitploit:~
HRESULT WINAPI HookAmsiScanBuffer(...)
{
    HRESULT Result = LazyHook::CallOriginal<HRESULT>(...);
    (*Result) = AMSI_RESULT_CLEAN;  // Force clean result
    return Result;
}

Esto demuestra cómo el comportamiento del software de seguridad puede modificarse en tiempo de ejecución interceptando llamadas críticas de API.

2. Monitoreo de llamadas a funciones

Engancha CreateFileA para registrar el acceso a archivos sin modificar el comportamiento de la aplicación:

root@kitploit:~
HANDLE WINAPI HookCreateFileA(LPCSTR Filename, ...)
{
    printf("File accessed: %s\n", Filename);
    return LazyHook::CallOriginal<HANDLE>(...);
}

Uso responsable y aviso legal

Este código demuestra técnicas avanzadas de evasión para:

  • Investigación y educación en seguridad
  • Operaciones de red team en entornos autorizados
  • Análisis de malware e investigación defensiva

⚠️ Advertencia: El uso no autorizado para eludir controles de seguridad, modificar el comportamiento del software o eludir protecciones puede violar las leyes de fraude informático (CFAA, GDPR, legislación equivalente). Este framework se proporciona solo para investigación de seguridad educativa y autorizada.


Comprender las técnicas ofensivas construye mejores defensas.

Descargar herramienta