
IKEv2، ikeext.dll، CVE-2026-33824، تحرير مزدوج، تهيئة الكومة، ROP، تجزئة SKF، استغلال ثغرات Windows، مكافحة التنقيح، التعتيم، خطاف API، شيل كود، قشرة عكسية
⚠️ المشروع قيد الإكمال. غير كامل الوظائف في حالته الحالية.
EpSiLoNPoInTIkEv2.cpp هو نموذج أولي لاستغلال (exploit) بلغة C/C++ يستهدف نظام Windows، طُوّر حول استغلال
من نوع double-free في ikeext.dll (برنامج تشغيل IKEv2 في Windows)، وهو مُدرج
قيد البحث تحت 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)يمكن توجيه جميع العمليات الحسابية والمنطقية إلى آلة افتراضية داخلية
(Obfh_VirtualMachine):
OP__ADD, OP__SUB, ..., OP__NOP) عشوائيًا وقت
الترجمة عبر __COUNTER__ وRND()._VM_ENCRYPT_INT(value) = (value - _VM_MUTATOR_KEY) * ~SALT_CMD.* -1)، وتُمرَّر مع قيم غير ذات معنى (junk values).goto، وحالات case سالبة مزيفة، وBREAK_STACK_* (تعليمات ASM مضمّنة
xor; jz; .byte 0xE8; cpuid)، وقفزات JMP مزيفة (.byte 0xFF, 0x25) وكتل من كود x86_64
مزيف لخداع مفككات الكود (decompilers).VM_ADD, , , , , , ,
, , , , , , ، إلخ.NO_CFLOW != 1)#define if(cond): كل if يحقن استدعاءً لـ__s_rdtsc() وBAD_CALL ميتًا.#define else: يحقن else if (0) { BAD_CALL; } ميتًا قبل else الحقيقي.#define while(...): مقيَّد بـ__s_rdtsc() != 0.1 وفحص مؤشر عبثي.#define for(...): مقيَّد بـOBFUS_CONDITION_BLOCK.#define switch(...): مقيَّد بـOBFUS_CONDITION_BLOCK.#define break: يحقن قبل كل .HIDE_STRING)STACK_STRING(str): يدفع السلسلة إلى المكدس عبر compound literal.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 على الخيط الرئيسي، وGetThreadContext
مع CONTEXT_DEBUG_REGISTERS، والتحقق من Dr0–Dr3 وDr7، وتصفيرها عبر ad_ZeroDRs.IsDebuggerPresent_proxy: يُحمِّل kernel32.dll ديناميكيًا، ويعيد بناء اسم
الدالة IsDebuggerPresent حرفًا بحرف عبر المتغيرات المتطايرة (_I, _s, _D, _e, _b, _u, _g, _g, _e, _r, _P, _r, _e, _s, _e, _n, _t)، ويستدعيها عبر GetProcAddress.ANTI_DEBUG: فحص مزدوج ،
يطلق (حلقة لا نهائية)، و (تعليمة IN ذات الامتياز)، و، و بلغة ASM،
ثم ( + ).9 متغيرات من تسلسلات ASM المضمّنة تُدرج في الدوال الحساسة:
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 (nonce من 32 بايت)، IKE_KEY_EXCHANGE_PAYLOAD (DH من 256 بايت)،
IKE_NOTIFY_PAYLOAD, IKE_VENDOR_ID_PAYLOAD, IKE_SKF_FRAGMENT_PAYLOAD.
التحويلات المكوَّنة (Transforms): AES-CBC-128 (12)، PRF HMAC-SHA2-256 (5)،
INTEG HMAC-SHA2-256-128 (12)، DH MODP-2048 (14).
IKE_DDOS_AMPLIFIER_PAYLOAD: عامل تضخيم + 64 بايت trigger.IKE_DDOS_LOOP_PAYLOAD: عدّاد حلقات + 32 بايت loop_code.IKE_DDOS_MEMORY_PAYLOAD: حجم/عدد عمليات التخصيص + 64 بايت من بيانات heap spray.HEAP_GROOM_CONTEXT: مقبض الكومة، العنوان المستهدف، الخيوط، stop_flag، allocated_chunks.HEAP_GROOM_THREAD_PARAMS: حجم الكتلة، عدد التكرارات، thread_id، SRWLOCK، use_nt_allocate.GROOM_CONFIG: thread_count، التكرارات، delay، chunk_size، الحد الأدنى/الأقصى للنسبة المئوية الحرة.0x1000، 1000 تكرار، تجزئة بين 30–70%.بنية ROP_CHAIN كاملة مع جميع الأدوات (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, , .
مصفوفة من 512 أداة ().
جدول g_rop_patterns[] يضم ~50+ نمط توقيع بايت لتحديد موقع الأدوات داخل الوحدات:
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() → الخروج إذا تم اكتشاف بيئة معزولة/آلة افتراضية.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[] تحاكي وحدات حماية مادية (dongles): skeydrv.dll, HASPDOSDRV,
MARXDEV1.SYS, WIBUKEY, SNTNLUSB, RNBOspro، إلخ.VM_SUBVM_MULVM_DIVVM_MODVM_EQUVM_NEQVM_LSSVM_GTRVM_LEQVM_GEQVM_OBF_INTVM_ADD_DBLVM_MUL_DBLif (OBFUS_CONDITION_BLOCK) BREAK_STACK_1breakfopenfclosefreadfwriteexitsnprintfvsprintfvsnprintfgetenvsystemabortatexitgetcwdtolowertoupperobfh_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)،
مع إعادة بناء اسم DLL حرفًا بحرف عبر المتغيرات المتطايرة
_k, _e, _r, _n, _e, _l وsprintf.IsDebuggerPresent() || IsDebuggerPresent_proxy()loop().byte 0xEDBREAK_STACK_1retcrash()int $3.byte 0xED, 0x00sub_rspstack_pivotrop_chain[MAX_ROP_CHAIN_SIZE]SKF_FRAGMENTS + 1