Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
IKEV2-POC — IKEv2, ikeext.dll, CVE-2026-33824, double free, heap grooming, ROP, frammentazione SKF, exploit per Windows, anti-debug, offuscamento, API hooking, shellcode, reverse shell | Kitploit
Strumenti/GitHubGitHub/epsilonpointori/ikev2-poc
Framework di ExploitReverse EngineeringShellcodeCommand and ControlSviluppo PayloadBinary Exploitation
GitHubepsilonpointori/ikev2-poc

IKEV2-POC

IKEv2, ikeext.dll, CVE-2026-33824, double free, heap grooming, ROP, frammentazione SKF, exploit per Windows, anti-debug, offuscamento, API hooking, shellcode, reverse shell

Vedi Repository
411 mese faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

EpSiLoNPoInTIkEv2.cpp

⚠️ Progetto in fase di finalizzazione. NON completamente funzionante nello stato attuale.


Descrizione

EpSiLoNPoInTIkEv2.cpp è un prototipo di exploit C/C++ che prende di mira Windows, sviluppato attorno a uno sfruttamento di tipo double-free in ikeext.dll (driver IKEv2 di Windows), referenziato nel corso della ricerca come CVE-2026-33824.

Il progetto comprende:

  • Un livello completo di offuscamento (macchina virtuale, offuscamento del flusso di controllo, mascheramento delle stringhe, false firme binarie, inline ASM anti-analisi).
  • Un motore di exploit IKEv2 completo (costruzione di pacchetti, frammentazione SKF, heap grooming multi-thread, ROP chain, primitive arbitrarie di lettura/scrittura).
  • Meccanismi di bypass di Windows Defender, AMSI ed ETW.
  • Un listener di shell inversa integrato sulla porta 4444.
  • Una GUI parziale (ListView, ComboBox, status bar) per l'ispezione di regioni di memoria sospette.

Architettura del codice

1. Livello di offuscamento (EpSi_OBF_ENDL / obfusheader ispirato)

Il codice utilizza un livello di offuscamento pesante attivato in fase di compilazione tramite #define EpSi_OBF_ENDL. Basato su obfusheader.h, adattato ed esteso.

False firme binarie (FAKE_SIGNS == 1)

Sezioni PE personalizzate vengono iniettate nel binario per ingannare gli scanner di protettori noti:

  • .vmp0, .vmp1, .vmp2 → VMProtect
  • UPX0 → UPX
  • .enigma1, .enigma2 → Enigma Protector
  • .winlice → Themida
  • .petite, .aspack, .adata, .rlp, .vlizer, .arch, .alien, .pwdprot, .dsstext, , , , , , (Nuitka), (Screen2Exe), ecc.

Macchina virtuale aritmetica (VIRT == 1)

Tutte le operazioni aritmetiche e logiche possono essere instradate in una VM interna (Obfh_VirtualMachine):

  • Gli opcode (OP__ADD, OP__SUB, ..., OP__NOP) vengono generati casualmente in fase di compilazione tramite __COUNTER__ e RND().
  • Ogni opcode è cifrato: _VM_ENCRYPT_INT(value) = (value - _VM_MUTATOR_KEY) * ~SALT_CMD.
  • Gli operandi vengono salati, invertiti (* -1) e passati con junk values.
  • La VM stessa è disseminata di goto, falsi case negativi, BREAK_STACK_* (inline ASM xor; jz; .byte 0xE8; cpuid), falsi JMP (.byte 0xFF, 0x25) e blocchi di falso codice x86_64 per ingannare i decompilatori.
  • Macro esposte: VM_ADD, , , , , , , , , , , , , , ecc.

Controllo di flusso offuscato (NO_CFLOW != 1)

  • #define if(cond): ogni if inietta una chiamata __s_rdtsc() e un BAD_CALL morto.
  • #define else: inietta un else if (0) { BAD_CALL; } morto prima del vero else.
  • #define while(...): condizionato da __s_rdtsc() != 0.1 e da un controllo del puntatore assurdo.
  • #define for(...): condizionato da OBFUS_CONDITION_BLOCK.
  • #define switch(...): condizionato da OBFUS_CONDITION_BLOCK.
  • #define break: inietta prima di ogni .

Mascheramento delle stringhe (HIDE_STRING)

  • STACK_STRING(str): spinge la stringa sullo stack tramite compound literal.
  • HIDE_STRING(str): combina obfh_process_hidden_string() + __s_rdtsc() con BAD_JMP morto per mascherare la stringa nel binario.

Proxy API (risoluzione dinamica completa)

Tutte le funzioni CRT e Win32 vengono reindirizzate:

  • CRT tramite GetProcAddress(LoadLibraryA("msvcrt"), ...) dinamico: printf, scanf, sprintf, strlen, strcmp, strcpy, strtok, memset, memcpy, strchr, strrchr, rand, realloc, calloc, , , , , , , , , , , , , , , .

Anti-debug (ANTI_DEBUG_V2 == 1)

  • Thread dedicato (ThreadCompareDRs): SuspendThread sul thread principale, GetThreadContext con CONTEXT_DEBUG_REGISTERS, verifica di Dr0–Dr3, Dr7, azzeramento tramite ad_ZeroDRs.
  • IsDebuggerPresent_proxy: carica kernel32.dll dinamicamente, ricostruisce il nome della funzione IsDebuggerPresent carattere per carattere tramite le variabili volatili (_I, _s, _D, _e, _b, _u, _g, _g, _e, _r, _P, _r, _e, _s, _e, _n, _t), chiamata tramite GetProcAddress.
  • Macro ANTI_DEBUG: doppio check , attiva (ciclo infinito), (IN privilegiato), , ASM, poi ( + ).

Macro BREAK_STACK (anti-analisi dello stack)

9 varianti di sequenze inline ASM inserite nelle funzioni sensibili: xor; jz; .byte 0xE8; cpuid (variazioni su eax, ebx, edx), falsi opcode 0x50, 0x20, 0x00, 0xEB, 0xE1 (x86), 0xFF, 0x25, 0xF1, 0xF2, 0xF3, 0xF4 (x86_64).


2. Motore IKEv2 / Exploit

Dipendenze

root@kitploit:~
#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")

Costanti dell'exploit

  • Target: IKEEXT_BASE_ADDRESS = 0x180000000
  • Offset double free: g_IkeextDoubleFreeOffset = 0x12B960
  • Handler del payload IKE: g_IkeextProcessIkePayload = 0x52220
  • Directory PE di ikeext: Export (0x1790A0), Import (0x179110), Exception (0x183000), Reloc (0x18C000), LoadConfig (0x12AE70), Debug (0x155CD0).
  • Offset delle strutture interne: g_Offset_MMSA_SecurityRealmBlob = 0x208, g_Offset_PacketContext_Blob = 0xC8.
  • Porta IKEv2: 500 (UDP), shell callback: 4444.

Strutture IKEv2 definite

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

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

Strutture DDoS personalizzate

  • IKE_DDOS_AMPLIFIER_PAYLOAD: fattore di amplificazione + 64 byte trigger.
  • IKE_DDOS_LOOP_PAYLOAD: contatore di loop + 32 byte loop_code.
  • IKE_DDOS_MEMORY_PAYLOAD: dimensione/conteggio allocazione + 64 byte heap spray data.

Heap grooming

  • HEAP_GROOM_CONTEXT: handle heap, indirizzo target, thread, stop_flag, allocated_chunks.
  • HEAP_GROOM_THREAD_PARAMS: dimensione chunk, iterazioni, thread_id, SRWLOCK, use_nt_allocate.
  • GROOM_CONFIG: thread_count, iterazioni, delay, chunk_size, min/max free %.
  • Parametri: 4 thread, chunk da 0x1000, 1000 iterazioni, frammentazione tra 30–70%.

ROP Chain

Struttura ROP_CHAIN completa con tutti i gadget necessari: pop_rax/rcx/rdx/r8/r9/rsp, mov_rax_rsp, mov_rcx_rsp, mov_rcx_rax, mov_rax_rcx, mov_rcx_rdx, xor_rax/rcx/rdx, jmp_rsp, call_rax, ret, virtual_protect, disable_cfg, disable_cet, add_rsp, , . Array di 512 gadget ().

Scanner di gadget ROP

Tabella g_rop_patterns[] di ~50+ pattern byte-signature per localizzare i gadget nei moduli: pop rax; ret, pop rcx; ret, pop rdx; ret, ..., mov [rcx], rax; ret, mov rax, [rcx]; ret, jmp rsp, VirtualProtect prologue, mov [gs:0x60], rax; ret, jmp [rax+0x58]; ret, lea rax, [rip+0x0]; jmp rax, add rsp, 0x28; ret, cmp rdx/r8/r9, 0x0; je/jne; ret, ecc.

Variabili globali dell'exploit

root@kitploit:~
uint64_t g_KernelBase, g_IkeextBase, g_SystemEprocess;
uint64_t g_IkeextDoubleFreeOffset = 0x12B960;
uint64_t g_IkeextProcessIkePayload = 0x52220;
uint64_t g_PopRax, g_PopRcx, g_PopRdx, g_PopR8, g_PopR9, g_PopRsp;
uint64_t g_MovRaxRsp, g_JmpRsp, g_VirtualProtect, g_DisableCFG, g_StackPivot;
uint64_t g_NtoskrnlBase, g_Kernel32Base, g_NtdllBase, g_HeapBase, g_ShellcodeAddr;
SOCKET g_Socket; struct sockaddr_in g_Target;
EXPLOIT_CONTEXT g_ExploitCtx; ROP_CHAIN g_RopChain;
HEAP_GROOM_CONTEXT g_GroomContext;
MODULE_DATA g_Modules; ROP_GADGET g_Gadgets;
std::vector<SUSPICIOUS_REGION> g_Regions;

Flusso principale (main)

  1. InitializeCriticalSection, init_debug_info.
  2. is_hostile_environment() → exit se viene rilevata una sandbox/VM.
  3. disable_amsi(), disable_defender(), disable_etw(), patch_etw().
  4. start_shell_listener() → listener di reverse shell sulla porta 4444.
  5. Analizza argv[1] (IP target) + argv[2] (porta, default 500).
  6. init_udp_socket() + inet_pton + test_target_reachability().
  7. Costruzione e invio dei pacchetti IKEv2 frammentati (SKF, fino a pacchetti).

Stato attuale

Il progetto è in fase di finalizzazione e non è completamente funzionante.

  • Alcune funzioni referenziate (disable_amsi, disable_defender, disable_etw, patch_etw, is_hostile_environment, test_target_reachability, start_shell_listener, stop_shell_listener, print_usage, init_debug_info) sono dichiarate ma potrebbero essere incomplete o assenti a seconda dello stato della build.
  • Gli offset di ikeext sono statici e specifici per una precisa build di Windows. Nessun meccanismo di risoluzione dinamica degli offset è ancora finalizzato.
  • La ROP chain è costruita ma il posizionamento e l'attivazione dello shellcode non sono completamente integrati nello stato attuale.
  • Alcune parti della GUI (ListView, ComboBox, scansione delle regioni) sono parzialmente integrate.
  • Il progetto potrebbe non compilare senza aggiustamenti del build system, delle dipendenze runassys/ e delle librerie linkate.

Disclaimer

Questo repository contiene un prototipo di ricerca in sicurezza offensiva che prende di mira un vettore di sfruttamento di rete di basso livello (IKEv2/ikeext.dll, Windows).

L'utilizzo di questo codice è strettamente riservato ad ambienti di test, ricerca o laboratorio in cui si dispone di un'autorizzazione esplicita.

L'autore declina ogni responsabilità per qualsiasi uso illegale, non autorizzato o dannoso di questo codice. Il codice è fornito così com'è, senza garanzia di funzionamento, stabilità o assenza di effetti indesiderati.

Il progetto è ancora in fase di finalizzazione e non è completamente funzionante nello stato attuale.

Scarica lo strumento
logicoma
__wibu00
__wibu01
PETETRIS
.tw
.rdata
.text
  • Stringhe codificate che imitano Enigma (0x45,0x6e,0x69,...), Denuvo (0x64,0x65,0x6E,...).
  • Array FAKE_DONGLE[] che imita dongle hardware: skeydrv.dll, HASPDOSDRV, MARXDEV1.SYS, WIBUKEY, SNTNLUSB, RNBOspro, ecc.
  • 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
    if (OBFUS_CONDITION_BLOCK) BREAK_STACK_1
    break
    fopen
    fclose
    fread
    fwrite
    exit
    snprintf
    vsprintf
    vsnprintf
    getenv
    system
    abort
    atexit
    getcwd
    tolower
    toupper
  • Win32 tramite wrapper obfh_int_proxy() su tutti i parametri: 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 sostituito da GetProcAddress_custom: scansione manuale di IMAGE_EXPORT_DIRECTORY (parse PE: e_lfanew, IMAGE_NT_HEADERS, IMAGE_DIRECTORY_ENTRY_EXPORT, AddressOfFunctions, AddressOfNames, AddressOfNameOrdinals).
  • LoadLibraryA offuscato in una catena di 6 wrapper annidati (da LoadLibraryA_0 a LoadLibraryA_proxy), con ricostruzione del nome della DLL carattere per carattere tramite le variabili volatili _k, _e, _r, _n, _e, _l e sprintf.
  • IsDebuggerPresent() || IsDebuggerPresent_proxy()
    loop()
    .byte 0xED
    BREAK_STACK_1
    ret
    crash()
    int $3
    .byte 0xED, 0x00
    sub_rsp
    stack_pivot
    rop_chain[MAX_ROP_CHAIN_SIZE]
    SKF_FRAGMENTS + 1
  • Trigger del double free, heap grooming, posizionamento dello shellcode, esecuzione della ROP chain.