
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, , , , , , (Nuitka), (Screen2Exe), आदि।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, , , , , , ,
, , , , , , , आदि।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 : प्रत्येक से पहले इंजेक्ट करता है।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, , , , , , ,
, , , , , , , , ।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 : डबल चेक , (अनंत लूप) ट्रिगर करता है, (विशेषाधिकार प्राप्त IN), , ASM, फिर ( + )।संवेदनशील कार्यों में डाली गई इनलाइन 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% के बीच विखंडन।सभी आवश्यक गैजेट्स के साथ पूर्ण ROP_CHAIN संरचना:
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, , ।
512 गैजेट्स की सारणी ()।
मॉड्यूल में गैजेट्स का पता लगाने के लिए ~50+ बाइट-सिग्नेचर पैटर्न की g_rop_patterns[] तालिका:
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, आदि।
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;
main)InitializeCriticalSection, init_debug_info।is_hostile_environment() → यदि सैंडबॉक्स/VM का पता चलता है तो बाहर निकलें।disable_amsi(), disable_defender(), disable_etw(), patch_etw()।start_shell_listener() → पोर्ट 4444 पर रिवर्स शेल लिस्नर।argv[1] (लक्ष्य IP) + argv[2] (पोर्ट, डिफ़ॉल्ट 500) पार्स करें।init_udp_socket() + inet_pton + test_target_reachability()।परियोजना अंतिम रूप दी जा रही है और पूरी तरह कार्यात्मक नहीं है।
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) घोषित किए गए हैं लेकिन बिल्ड की स्थिति के अनुसार अपूर्ण या अनुपस्थित हो सकते हैं।runassys/ निर्भरताओं और लिंक की गई लाइब्रेरीज़ में समायोजन के बिना परियोजना संकलित नहीं हो सकती है।इस रिपॉजिटरी में एक आक्रामक सुरक्षा अनुसंधान प्रोटोटाइप है जो निम्न-स्तरीय नेटवर्क शोषण वेक्टर (IKEv2/ikeext.dll, Windows) को लक्षित करता है।
इस कोड का उपयोग केवल परीक्षण, अनुसंधान या प्रयोगशाला वातावरण के लिए सख्ती से आरक्षित है जहां आपके पास स्पष्ट अनुमति है।
लेखक इस कोड के किसी भी अवैध, अनधिकृत या हानिकारक उपयोग के लिए कोई जिम्मेदारी नहीं लेता है। कोड वैसे ही प्रदान किया गया है, बिना कार्यक्षमता, स्थिरता या प्रतिकूल प्रभावों की अनुपस्थिति की किसी गारंटी के।
परियोजना अभी भी अंतिम रूप दी जा रही है और वर्तमान स्थिति में पूरी तरह कार्यात्मक नहीं है।
logicoma__wibu00__wibu01PETETRIS.tw.rdata.text0x45,0x6e,0x69,...), Denuvo (0x64,0x65,0x6E,...)।FAKE_DONGLE[] सारणी हार्डवेयर डोंगलों की नकल करती है: skeydrv.dll, HASPDOSDRV,
MARXDEV1.SYS, WIBUKEY, SNTNLUSB, RNBOspro, आदि।VM_SUBVM_MULVM_DIVVM_MODVM_EQUVM_NEQVM_LSSVM_GTRVM_LEQVM_GEQVM_OBF_INTVM_ADD_DBLVM_MUL_DBLbreakif (OBFUS_CONDITION_BLOCK) BREAK_STACK_1fopenfclosefreadfwriteexitsnprintfvsprintfvsnprintfgetenvsystemabortatexitgetcwdtolowertoupperobfh_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 नाम का पुनर्निर्माण करता है।IsDebuggerPresent() || IsDebuggerPresent_proxy()loop().byte 0xEDBREAK_STACK_1retcrash()int $3.byte 0xED, 0x00sub_rspstack_pivotrop_chain[MAX_ROP_CHAIN_SIZE]SKF_FRAGMENTS + 1