Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
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.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
IKEV2-POC — IKEv2, ikeext.dll, CVE-2026-33824, doble liberación, manipulación del heap, ROP, fragmentación SKF, exploit de Windows, anti-depuración, ofuscación, hooking de API, shellcode, shell inversa | Kitploit
Herramientas/GitHubGitHub/epsilonpointori/ikev2-poc
Frameworks de ExploitsIngeniería InversaShellcodeComando y ControlDesarrollo de PayloadsExplotación de Binarios
GitHubepsilonpointori/ikev2-poc

IKEV2-POC

IKEv2, ikeext.dll, CVE-2026-33824, doble liberación, manipulación del heap, ROP, fragmentación SKF, exploit de Windows, anti-depuración, ofuscación, hooking de API, shellcode, shell inversa

Ver Repositorio
4117hace 3 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

EpSiLoNPoInTIkEv2.cpp

⚠️ Proyecto en proceso de finalización. NO totalmente funcional en el estado actual.


Descripción

EpSiLoNPoInTIkEv2.cpp es un prototipo de exploit C/C++ dirigido a Windows, desarrollado en torno a una explotación de tipo double-free en ikeext.dll (controlador IKEv2 de Windows), referenciado en curso de investigación como CVE-2026-33824.

El proyecto agrupa:

  • Una capa de ofuscación completa (máquina virtual, confusión de flujo de control, enmascaramiento de cadenas, falsas firmas binarias, inline ASM anti-análisis).
  • Un motor de explotación IKEv2 completo (construcción de paquetes, fragmentación SKF, heap grooming multihilo, cadena ROP, primitivas arbitrarias de lectura/escritura).
  • Mecanismos de evasión de Windows Defender, AMSI y ETW.
  • Un listener de shell inverso integrado en el puerto 4444.
  • Una GUI parcial (ListView, ComboBox, barra de estado) para inspección de regiones de memoria sospechosas.

Arquitectura del código

1. Capa de ofuscación (EpSi_OBF_ENDL / obfusheader inspirado)

El código utiliza una capa de ofuscación pesada activada en compilación mediante #define EpSi_OBF_ENDL. Basado en obfusheader.h, adaptado y extendido.

Falsas firmas binarias (FAKE_SIGNS == 1)

Se inyectan secciones PE personalizadas en el binario para engañar a los escáneres de protectores conocidos:

  • .vmp0, .vmp1, .vmp2 → VMProtect
  • UPX0 → UPX
  • .enigma1, .enigma2 → Enigma Protector
  • .winlice → Themida
  • .petite, .aspack, .adata, .rlp, .vlizer, .arch, .alien, .pwdprot, .dsstext, logicoma, __wibu00, __wibu01, PETETRIS, .tw, .rdata (Nuitka), .text (Screen2Exe), etc.
  • Cadenas codificadas que imitan Enigma (0x45,0x6e,0x69,...), Denuvo (0x64,0x65,0x6E,...).
  • Array FAKE_DONGLE[] que imita dongles de hardware: skeydrv.dll, HASPDOSDRV, MARXDEV1.SYS, WIBUKEY, SNTNLUSB, RNBOspro, etc.

Máquina virtual aritmética (VIRT == 1)

Todas las operaciones aritméticas y lógicas pueden enrutarse a una VM interna (Obfh_VirtualMachine):

  • Los opcodes (OP__ADD, OP__SUB, ..., OP__NOP) se generan aleatoriamente en compilación mediante __COUNTER__ y RND().
  • Cada opcode está cifrado: _VM_ENCRYPT_INT(value) = (value - _VM_MUTATOR_KEY) * ~SALT_CMD.
  • Los operandos se salan, se invierten (* -1), y se pasan con junk values.
  • La VM en sí está repleta de goto, falsos case negativos, BREAK_STACK_* (inline ASM xor; jz; .byte 0xE8; cpuid), falsos JMP (.byte 0xFF, 0x25) y bloques de falso código x86_64 para engañar a los descompiladores.
  • Macros expuestas: VM_ADD, VM_SUB, VM_MUL, VM_DIV, VM_MOD, VM_EQU, VM_NEQ, VM_LSS, VM_GTR, VM_LEQ, VM_GEQ, VM_OBF_INT, VM_ADD_DBL, VM_MUL_DBL, etc.

Flujo de control ofuscado (NO_CFLOW != 1)

  • #define if(cond): cada if inyecta una llamada __s_rdtsc() y un BAD_CALL muerto.
  • #define else: inyecta un else if (0) { BAD_CALL; } muerto antes del else real.
  • #define while(...): condicionado por __s_rdtsc() != 0.1 y una comprobación de puntero absurda.
  • #define for(...): condicionado por OBFUS_CONDITION_BLOCK.
  • #define switch(...): condicionado por OBFUS_CONDITION_BLOCK.
  • #define break: inyecta if (OBFUS_CONDITION_BLOCK) BREAK_STACK_1 antes de cada break.

Enmascaramiento de cadenas (HIDE_STRING)

  • STACK_STRING(str): empuja la cadena a la pila mediante compound literal.
  • HIDE_STRING(str): combina obfh_process_hidden_string() + __s_rdtsc() con BAD_JMP muerto para ocultar la cadena en el binario.

Proxies de API (resolución dinámica completa)

Todas las funciones CRT y Win32 están redirigidas:

  • CRT mediante GetProcAddress(LoadLibraryA("msvcrt"), ...) dinámico: printf, scanf, sprintf, strlen, strcmp, strcpy, strtok, memset, memcpy, strchr, strrchr, rand, realloc, calloc, fopen, fclose, fread, fwrite, exit, snprintf, vsprintf, vsnprintf, getenv, system, abort, atexit, getcwd, tolower, toupper.
  • Win32 mediante wrappers obfh_int_proxy() sobre todos los parámetros: CreateFile, ReadFile, WriteFile, CloseHandle, VirtualAlloc, VirtualFree, CreateThread, WaitForSingleObject, WaitForMultipleObjects, ExitProcess, GetModuleHandle, GetModuleFileName, HeapCreate, HeapAlloc, HeapFree, GlobalAlloc, GlobalFree, GetTempPath, SetEvent, ResetEvent, Sleep, memmove, GetParent, GetWindowRect, GetClientRect, SetWindowPos, SetConsoleTextAttribute, GetDesktopWindow, GetStockObject.
  • GetProcAddress reemplazado por GetProcAddress_custom: recorrido manual del IMAGE_EXPORT_DIRECTORY (parseo de PE: e_lfanew, IMAGE_NT_HEADERS, IMAGE_DIRECTORY_ENTRY_EXPORT, AddressOfFunctions, AddressOfNames, AddressOfNameOrdinals).
  • LoadLibraryA ofuscado en una cadena de 6 wrappers anidados (LoadLibraryA_0 a LoadLibraryA_proxy), con reconstrucción del nombre de la DLL carácter a carácter mediante las variables volátiles _k, _e, _r, _n, _e, _l y sprintf.

Anti-debug (ANTI_DEBUG_V2 == 1)

  • Hilo dedicado (ThreadCompareDRs): SuspendThread sobre el hilo principal, GetThreadContext con CONTEXT_DEBUG_REGISTERS, verificación de Dr0–Dr3, Dr7, zeroing mediante ad_ZeroDRs.
  • IsDebuggerPresent_proxy: carga kernel32.dll dinámicamente, reconstruye el nombre de la función IsDebuggerPresent carácter a carácter mediante variables volátiles (_I, _s, _D, _e, _b, _u, _g, _g, _e, _r, _P, _r, _e, _s, _e, _n, _t), llamada mediante GetProcAddress.
  • Macro ANTI_DEBUG: doble comprobación IsDebuggerPresent() || IsDebuggerPresent_proxy(), dispara loop() (bucle infinito), .byte 0xED (IN privilegiado), BREAK_STACK_1, ret ASM, y luego crash() (int $3 + .byte 0xED, 0x00).

Macros BREAK_STACK (anti-análisis de pila)

9 variantes de secuencias inline ASM insertadas en las funciones sensibles: xor; jz; .byte 0xE8; cpuid (variaciones sobre eax, ebx, edx), falsos opcodes 0x50, 0x20, 0x00, 0xEB, 0xE1 (x86), 0xFF, 0x25, 0xF1, 0xF2, 0xF3, 0xF4 (x86_64).


2. Motor IKEv2 / Exploit

Dependencias

#include "runassys/ntnative.h"
#include "runassys/runassys.h"
#include "runassys/ntdll-stubs/ntdll-stubs.c"
#include "runassys/ntdll-stubs/ntdll.def.c"
#pragma comment(lib, "ws2_32.lib")
#pragma comment(lib, "iphlpapi.lib")
#pragma comment(lib, "bcrypt.lib")
#pragma comment(lib, "Version.lib")

Constantes del exploit

  • Objetivo: IKEEXT_BASE_ADDRESS = 0x180000000
  • Offset del double free: g_IkeextDoubleFreeOffset = 0x12B960
  • Handler de payload IKE: g_IkeextProcessIkePayload = 0x52220
  • Directorios PE de ikeext: Export (0x1790A0), Import (0x179110), Exception (0x183000), Reloc (0x18C000), LoadConfig (0x12AE70), Debug (0x155CD0).
  • Offsets de estructuras internas: g_Offset_MMSA_SecurityRealmBlob = 0x208, g_Offset_PacketContext_Blob = 0xC8.
  • Puerto IKEv2: 500 (UDP), callback de shell: 4444.

Estructuras IKEv2 definidas

IKE_HEADER, IKE_SA_PAYLOAD, IKE_PROPOSAL_PAYLOAD, IKE_TRANSFORM_PAYLOAD, IKE_NONCE_PAYLOAD (nonce de 32 bytes), IKE_KEY_EXCHANGE_PAYLOAD (DH 256 bytes), IKE_NOTIFY_PAYLOAD, IKE_VENDOR_ID_PAYLOAD, IKE_SKF_FRAGMENT_PAYLOAD.

Transforms configurados: AES-CBC-128 (12), PRF HMAC-SHA2-256 (5), INTEG HMAC-SHA2-256-128 (12), DH MODP-2048 (14).

Estructuras DDoS personalizadas

  • IKE_DDOS_AMPLIFIER_PAYLOAD: factor de amplificación + 64 bytes de trigger.
  • IKE_DDOS_LOOP_PAYLOAD: contador de bucle + 32 bytes de loop_code.
  • IKE_DDOS_MEMORY_PAYLOAD: tamaño/contador de asignación + 64 bytes de datos de heap spray.
Descargar herramienta