
IKEv2, ikeext.dll, CVE-2026-33824, डबल फ्री, हीप ग्रूमिंग, ROP, SKF विखंडन, विंडोज शोषण, एंटी-डीबग, अस्पष्टीकरण, एपीआई हुकिंग, शेलकोड, रिवर्स शेल
⚠️ परियोजना अंतिम रूप दी जा रही है। वर्तमान स्थिति में पूरी तरह कार्यात्मक नहीं है।
EpSiLoNPoInTIkEv2.cpp एक C/C++ एक्सप्लॉइट प्रोटोटाइप है जो विंडोज को लक्षित करता है, जिसे ikeext.dll में डबल-फ्री प्रकार के शोषण के आसपास विकसित किया गया है (विंडोज का IKEv2 ड्राइवर), अनुसंधान के तहत CVE-2026-33824 के रूप में संदर्भित।
परियोजना में शामिल हैं:
EpSi_OBF_ENDL / प्रेरित obfusheader)कोड संकलन पर #define EpSi_OBF_ENDL के माध्यम से सक्रिय एक भारी अस्पष्टता परत का उपयोग करता है। obfusheader.h पर आधारित, अनुकूलित और विस्तारित।
FAKE_SIGNS == 1)ज्ञात प्रोटेक्टर स्कैनर्स को धोखा देने के लिए बाइनरी में कस्टम PE अनुभाग इंजेक्ट किए जाते हैं:
.vmp0, .vmp1, .vmp2 → VMProtectUPX0 → 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), आदि।0x45,0x6e,0x69,...), Denuvo (0x64,0x65,0x6E,...)।FAKE_DONGLE[] सारणी हार्डवेयर डोंगलों की नकल करती है: skeydrv.dll, HASPDOSDRV,
MARXDEV1.SYS, WIBUKEY, SNTNLUSB, RNBOspro, आदि।VIRT == 1)सभी अंकगणितीय और तार्किक संचालन को एक आंतरिक VM (Obfh_VirtualMachine) में रूट किया जा सकता है:
OP__ADD, OP__SUB, ..., OP__NOP) संकलन पर __COUNTER__ और RND() के माध्यम से यादृच्छिक रूप से उत्पन्न होते हैं।_VM_ENCRYPT_INT(value) = (value - _VM_MUTATOR_KEY) * ~SALT_CMD।* -1), और जंक वैल्यू के साथ पास किए जाते हैं।goto, झूठे नकारात्मक case, BREAK_STACK_* (इनलाइन ASM xor; jz; .byte 0xE8; cpuid), झूठे JMP (.byte 0xFF, 0x25) और डीकंपाइलर्स को धोखा देने के लिए नकली x86_64 कोड ब्लॉक से भरा हुआ है।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, आदि।NO_CFLOW != 1)#define if(cond) : प्रत्येक if एक __s_rdtsc() कॉल और एक मृत BAD_CALL इंजेक्ट करता है।#define else : वास्तविक else से पहले एक मृत else if (0) { BAD_CALL; } इंजेक्ट करता है।#define while(...) : __s_rdtsc() != 0.1 और एक बेतुके पॉइंटर चेक द्वारा सशर्त।#define for(...) : OBFUS_CONDITION_BLOCK द्वारा सशर्त।#define switch(...) : OBFUS_CONDITION_BLOCK द्वारा सशर्त।#define break : प्रत्येक break से पहले if (OBFUS_CONDITION_BLOCK) BREAK_STACK_1 इंजेक्ट करता है।HIDE_STRING)STACK_STRING(str) : कंपाउंड लिटरल के माध्यम से स्ट्रिंग को स्टैक पर धकेलता है।HIDE_STRING(str) : बाइनरी में स्ट्रिंग को छिपाने के लिए obfh_process_hidden_string() + __s_rdtsc() को एक मृत BAD_JMP के साथ जोड़ता है।सभी CRT और Win32 फ़ंक्शन पुनर्निर्देशित किए गए हैं:
GetProcAddress(LoadLibraryA("msvcrt"), ...) के माध्यम से गतिशील : 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।obfh_int_proxy() के माध्यम से : 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 को GetProcAddress_custom से बदल दिया गया: IMAGE_EXPORT_DIRECTORY का मैन्युअल ट्रैवर्सल (PE पार्स: e_lfanew, IMAGE_NT_HEADERS, IMAGE_DIRECTORY_ENTRY_EXPORT, AddressOfFunctions, AddressOfNames, AddressOfNameOrdinals)।LoadLibraryA अस्पष्टीकृत 6 नेस्टेड रैपर्स (LoadLibraryA_0 से LoadLibraryA_proxy) की श्रृंखला में, अस्थायी चर _k, _e, _r, _n, _e, _l और sprintf के माध्यम से वर्ण दर वर्ण DLL नाम का पुनर्निर्माण करता है।ANTI_DEBUG_V2 == 1)ThreadCompareDRs) : मुख्य थ्रेड पर SuspendThread, CONTEXT_DEBUG_REGISTERS के साथ GetThreadContext, Dr0–Dr3, Dr7 की जाँच, ad_ZeroDRs के माध्यम से शून्यीकरण।IsDebuggerPresent_proxy : kernel32.dll को गतिशील रूप से लोड करता है, अस्थायी चर (_I, _s, _D, _e, _b, _u, _g, _g, _e, _r, _P, _r, _e, _s, _e, _n, _t) के माध्यम से IsDebuggerPresent फ़ंक्शन नाम का वर्ण दर वर्ण पुनर्निर्माण करता है, GetProcAddress के माध्यम से कॉल।ANTI_DEBUG : डबल चेक IsDebuggerPresent() || IsDebuggerPresent_proxy(), loop() (अनंत लूप) ट्रिगर करता है, .byte 0xED (विशेषाधिकार प्राप्त IN), BREAK_STACK_1, ret ASM, फिर crash() (int $3 + .byte 0xED, 0x00)।संवेदनशील कार्यों में डाली गई इनलाइन ASM अनुक्रमों के 9 प्रकार:
xor; jz; .byte 0xE8; cpuid (eax, ebx, edx पर भिन्नताएं), नकली ओपकोड 0x50, 0x20,
0x00, 0xEB, 0xE1 (x86), 0xFF, 0x25, 0xF1, 0xF2, 0xF3, 0xF4 (x86_64)।
#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")
IKEEXT_BASE_ADDRESS = 0x180000000g_IkeextDoubleFreeOffset = 0x12B960g_IkeextProcessIkePayload = 0x522200x1790A0), Import (0x179110), Exception (0x183000),
Reloc (0x18C000), LoadConfig (0x12AE70), Debug (0x155CD0)।g_Offset_MMSA_SecurityRealmBlob = 0x208,
g_Offset_PacketContext_Blob = 0xC8।500 (UDP), शेल कॉलबैक : 4444।IKE_HEADER, IKE_SA_PAYLOAD, IKE_PROPOSAL_PAYLOAD, IKE_TRANSFORM_PAYLOAD,
IKE_NONCE_PAYLOAD (32 बाइट्स नॉन्स), IKE_KEY_EXCHANGE_PAYLOAD (DH 256 बाइट्स),
IKE_NOTIFY_PAYLOAD, IKE_VENDOR_ID_PAYLOAD, IKE_SKF_FRAGMENT_PAYLOAD।
कॉन्फ़िगर किए गए ट्रांसफ़ॉर्म : AES-CBC-128 (12), PRF HMAC-SHA2-256 (5),
INTEG HMAC-SHA2-256-128 (12), DH MODP-2048 (14)।
IKE_DDOS_AMPLIFIER_PAYLOAD : प्रवर्धन कारक + 64 ऑक्टेट ट्रिगर।IKE_DDOS_LOOP_PAYLOAD : लूप काउंटर + 32 ऑक्टेट loop_code।IKE_DDOS_MEMORY_PAYLOAD : आकार/गणना आवंटन + 64 ऑक्टेट हीप स्प्रे डेटा।HEAP_GROOM_CONTEXT : हैंडल हीप, लक्ष्य पता, थ्रेड, stop_flag, allocated_chunks।HEAP_GROOM_THREAD_PARAMS : चंक आकार, पुनरावृत्तियाँ, थ्रेड आईडी, SRWLOCK, use_nt_allocate।GROOM_CONFIG : thread_count, पुनरावृत्तियाँ, विलंब, chunk_size, न्यूनतम/अधिकतम मुक्त %।0x1000 के चंक, 1000 पुनरावृत्तियाँ, 30–70% के बीच विखंडन।