Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
IKEV2-POC — IKEv2, ikeext.dll, CVE-2026-33824, Doppel-Freigabe, Heap-Grooming, ROP, SKF-Fragmentierung, Windows-Exploit, Anti-Debug, Verschleierung, API-Hooking, Shellcode, Reverse-Shell | Kitploit
Tools/GitHubGitHub/epsilonpointori/ikev2-poc
Exploit-FrameworksReverse EngineeringShellcodeCommand and ControlPayload-EntwicklungBinary-Exploitation
GitHubepsilonpointori/ikev2-poc

IKEV2-POC

IKEv2, ikeext.dll, CVE-2026-33824, Doppel-Freigabe, Heap-Grooming, ROP, SKF-Fragmentierung, Windows-Exploit, Anti-Debug, Verschleierung, API-Hooking, Shellcode, Reverse-Shell

Repository anzeigen
41vor 1 MonatNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

EpSiLoNPoInTIkEv2.cpp

⚠️ Projekt befindet sich in der Abschlussphase. Im aktuellen Zustand NICHT voll funktionsfähig.


Beschreibung

EpSiLoNPoInTIkEv2.cpp ist ein C/C++-Exploit-Prototyp für Windows, der auf einer Ausnutzung vom Typ double-free in ikeext.dll (IKEv2-Treiber von Windows) basiert, die in der laufenden Forschung als CVE-2026-33824 referenziert wird.

Das Projekt umfasst:

  • Eine vollständige Obfuskationsschicht (virtuelle Maschine, Kontrollflussverschleierung, Stringverstecken, falsche Binärsignaturen, Inline-ASM-Anti-Analyse).
  • Eine vollständige IKEv2-Exploit-Engine (Paketkonstruktion, SKF-Fragmentierung, Multi-Thread-Heap-Grooming, ROP-Chain, beliebige Lese-/Schreibprimitive).
  • Mechanismen zur Umgehung von Windows Defender, AMSI und ETW.
  • Einen integrierten Reverse-Shell-Listener auf Port 4444.
  • Eine teilweise GUI (ListView, ComboBox, Statusleiste) zur Inspektion verdächtiger Speicherbereiche.

Code-Architektur

1. Obfuskationsschicht (EpSi_OBF_ENDL / inspiriert von obfusheader)

Der Code verwendet eine schwere Obfuskationsschicht, die zur Kompilierzeit über #define EpSi_OBF_ENDL aktiviert wird. Basiert auf obfusheader.h, angepasst und erweitert.

Falsche Binärsignaturen (FAKE_SIGNS == 1)

Benutzerdefinierte PE-Abschnitte werden in die Binärdatei injiziert, um Scanner bekannter Schützer zu täuschen:

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

Arithmetische virtuelle Maschine (VIRT == 1)

Alle arithmetischen und logischen Operationen können in eine interne VM umgeleitet werden (Obfh_VirtualMachine):

  • Die Opcodes (OP__ADD, OP__SUB, ..., OP__NOP) werden zur Kompilierzeit zufällig über __COUNTER__ und RND() generiert.
  • Jeder Opcode ist verschlüsselt: _VM_ENCRYPT_INT(value) = (value - _VM_MUTATOR_KEY) * ~SALT_CMD.
  • Die Operanden werden gesalzen, invertiert (* -1) und mit Junk-Werten übergeben.
  • Die VM selbst ist übersät mit goto, falschen negativen cases, BREAK_STACK_* (Inline-ASM xor; jz; .byte 0xE8; cpuid), falschen JMPs (.byte 0xFF, 0x25) und Blöcken von falschem x86_64-Code, um Dekompilierer zu täuschen.
  • Verfügbare Makros: VM_ADD, , , , , , , , , , , , , , etc.

Verschleierter Kontrollfluss (NO_CFLOW != 1)

  • #define if(cond): jedes if injiziert einen __s_rdtsc()-Aufruf und einen toten BAD_CALL.
  • #define else: injiziert ein totes else if (0) { BAD_CALL; } vor dem echten else.
  • #define while(...): konditioniert durch __s_rdtsc() != 0.1 und eine absurde Zeigerprüfung.
  • #define for(...): konditioniert durch OBFUS_CONDITION_BLOCK.
  • #define switch(...): konditioniert durch OBFUS_CONDITION_BLOCK.
  • #define break: injiziert vor jedem .

Stringverstecken (HIDE_STRING)

  • STACK_STRING(str): legt den String über ein Compound-Literal auf den Stack.
  • HIDE_STRING(str): kombiniert obfh_process_hidden_string() + __s_rdtsc() mit einem toten BAD_JMP, um den String in der Binärdatei zu verstecken.

API-Proxies (vollständige dynamische Auflösung)

Alle CRT- und Win32-Funktionen werden umgeleitet:

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

Anti-Debug (ANTI_DEBUG_V2 == 1)

  • Dedizierter Thread (ThreadCompareDRs): SuspendThread auf dem Hauptthread, GetThreadContext mit CONTEXT_DEBUG_REGISTERS, Überprüfung von Dr0–Dr3, Dr7, Zeroing via ad_ZeroDRs.
  • IsDebuggerPresent_proxy lädt kernel32.dll dynamisch, rekonstruiert den Funktionsnamen IsDebuggerPresent Zeichen für Zeichen über die volatilen Variablen (_I, _s, _D, _e, _b, _u, _g, _g, _e, _r, _P, _r, _e, _s, _e, _n, _t), Aufruf über GetProcAddress.
  • Makro ANTI_DEBUG: doppelte Prüfung , löst (Endlosschleife) aus, (privilegiertes IN), , -ASM, dann ( + ).

BREAK_STACK-Makros (Stack-Analyse-Anti)

9 Varianten von Inline-ASM-Sequenzen, die in sensible Funktionen eingefügt werden: xor; jz; .byte 0xE8; cpuid (Variationen auf eax, ebx, edx), falsche Opcodes 0x50, 0x20, 0x00, 0xEB, 0xE1 (x86), 0xFF, 0x25, 0xF1, 0xF2, 0xF3, 0xF4 (x86_64).


2. IKEv2-Engine / Exploit

Abhängigkeiten

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")

Exploit-Konstanten

  • Ziel: IKEEXT_BASE_ADDRESS = 0x180000000
  • Double-Free-Offset: g_IkeextDoubleFreeOffset = 0x12B960
  • Handler-Payload IKE: g_IkeextProcessIkePayload = 0x52220
  • PE-Verzeichnisse von ikeext: Export (0x1790A0), Import (0x179110), Exception (0x183000), Relocation (0x18C000), LoadConfig (0x12AE70), Debug (0x155CD0).
  • Offsets interner Strukturen: g_Offset_MMSA_SecurityRealmBlob = 0x208, g_Offset_PacketContext_Blob = 0xC8.
  • IKEv2-Port: 500 (UDP), Shell-Callback: 4444.

Definierte IKEv2-Strukturen

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.

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

Benutzerdefinierte DDoS-Strukturen

  • IKE_DDOS_AMPLIFIER_PAYLOAD: Verstärkungsfaktor + 64 Byte Trigger.
  • IKE_DDOS_LOOP_PAYLOAD: Schleifenzähler + 32 Byte Loop-Code.
  • IKE_DDOS_MEMORY_PAYLOAD: Größe/Anzahl Allokation + 64 Byte Heap-Spray-Daten.

Heap-Grooming

  • HEAP_GROOM_CONTEXT: Heap-Handle, Zieladresse, Threads, Stop-Flag, allozierte Chunks.
  • HEAP_GROOM_THREAD_PARAMS: Chunk-Größe, Iterationen, Thread-ID, SRWLOCK, use_nt_allocate.
  • GROOM_CONFIG: Thread-Anzahl, Iterationen, Verzögerung, Chunk-Größe, min./max. Freigabe %.
  • Parameter: 4 Threads, Chunks von 0x1000, 1000 Iterationen, Fragmentierung zwischen 30–70%.

ROP-Chain

Vollständige ROP_CHAIN-Struktur mit allen benötigten Gadgets: 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 von 512 Gadgets ().

ROP-Gadget-Scanner

Tabelle g_rop_patterns[] mit ~50+ Byte-Signaturmustern zum Auffinden der Gadgets in den Modulen: 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, etc.

Globale Exploit-Variablen

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;

Hauptablauf (main)

  1. InitializeCriticalSection, init_debug_info.
  2. is_hostile_environment() → exit bei Sandbox/VM-Erkennung.
  3. disable_amsi(), disable_defender(), disable_etw(), patch_etw().
  4. start_shell_listener() → Reverse-Shell-Listener auf Port 4444.
  5. Parse argv[1] (Ziel-IP) + argv[2] (Port, Standard 500).
  6. init_udp_socket() + inet_pton + test_target_reachability().
  7. Erstellung und Versand fragmentierter IKEv2-Pakete (SKF, bis zu Pakete).

Aktueller Stand

Das Projekt befindet sich in der Abschlussphase und ist nicht voll funktionsfähig.

  • Einige referenzierte Funktionen (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) sind deklariert, können aber je nach Build-Status unvollständig oder abwesend sein.
  • Die Offsets von ikeext sind statisch und für einen bestimmten Windows-Build spezifisch. Es ist noch kein Mechanismus zur dynamischen Auflösung der Offsets fertiggestellt.
  • Die ROP-Chain ist konstruiert, aber die Platzierung und Aktivierung des Shellcodes sind im aktuellen Zustand nicht vollständig integriert.
  • Teile der GUI (ListView, ComboBox, Scannen von Regionen) sind teilweise integriert.
  • Das Projekt könnte ohne Anpassungen des Build-Systems, der runassys/-Abhängigkeiten und der verlinkten Bibliotheken nicht kompilieren.

Haftungsausschluss

Dieses Repository enthält einen Proof-of-Concept aus der offensiven Sicherheitsforschung, der auf einen niedrigschwelligen Netzwerk-Exploit-Vektor (IKEv2/ikeext.dll, Windows) abzielt.

Die Verwendung dieses Codes ist streng auf Test-, Forschungs- oder Laborumgebungen beschränkt, für die Sie eine ausdrückliche Genehmigung haben.

Der Autor übernimmt keine Haftung für jegliche illegale, unbefugte oder schädigende Nutzung dieses Codes. Der Code wird wie besehen bereitgestellt, ohne Garantie für Funktion, Stabilität oder das Ausbleiben unerwünschter Nebenwirkungen.

Das Projekt befindet sich noch in der Abschlussphase und ist im aktuellen Zustand nicht voll funktionsfähig.

Tool herunterladen
logicoma
__wibu00
__wibu01
PETETRIS
.tw
.rdata
.text
  • Codierte Strings, die Enigma imitieren (0x45,0x6e,0x69,...), Denuvo (0x64,0x65,0x6E,...).
  • Array FAKE_DONGLE[], das Hardware-Dongles imitiert: skeydrv.dll, HASPDOSDRV, MARXDEV1.SYS, WIBUKEY, SNTNLUSB, RNBOspro, etc.
  • 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 über Wrapper obfh_int_proxy() auf allen Parametern: 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 ersetzt durch GetProcAddress_custom: manuelle Durchlaufen des IMAGE_EXPORT_DIRECTORY (Parse PE: e_lfanew, IMAGE_NT_HEADERS, IMAGE_DIRECTORY_ENTRY_EXPORT, AddressOfFunctions, AddressOfNames, AddressOfNameOrdinals).
  • LoadLibraryA obfuskiert in einer Kette von 6 verschachtelten Wrappern (LoadLibraryA_0 bis LoadLibraryA_proxy), mit Rekonstruktion des DLL-Namens Zeichen für Zeichen über die volatilen Variablen _k, _e, _r, _n, _e, _l und 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
  • Auslösen des Double-Free, Heap-Grooming, Platzieren des Shellcodes, Ausführen der ROP-Chain.