Skip to content
KitploitKITPLOIT
ИнструментыБлог
Log in
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

ЛентыКонтактыКонфиденциальность© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
IKEV2-POC — IKEv2, ikeext.dll, CVE-2026-33824, двойное освобождение, подстройка кучи, ROP, фрагментация SKF, Windows exploit, антиотладка, обфускация, API hooking, shellcode, reverse shell | Kitploit
Инструменты/GitHubGitHub/epsilonpointori/ikev2-poc
Фреймворки для эксплойтовОбратная инженерияШелл-кодКомандование и УправлениеРазработка Полезной НагрузкиЭксплуатация Бинарных Файлов
GitHubepsilonpointori/ikev2-poc

IKEV2-POC

IKEv2, ikeext.dll, CVE-2026-33824, двойное освобождение, подстройка кучи, ROP, фрагментация SKF, Windows exploit, антиотладка, обфускация, API hooking, shellcode, reverse shell

Репозиторий
41173 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

EpSiLoNPoInTIkEv2.cpp

⚠️ Проект находится в стадии завершения. НЕ полностью функционален в текущем состоянии.


Описание

EpSiLoNPoInTIkEv2.cpp — это прототип эксплойта C/C++, нацеленный на Windows, разработанный на основе эксплуатации типа double-free в ikeext.dll (драйвер IKEv2 Windows), в настоящее время исследуемый под обозначением CVE-2026-33824.

Проект включает:

  • Полный слой обфускации (виртуальная машина, запутывание потока управления, скрытие строк, ложные бинарные сигнатуры, встроенный ASM против анализа).
  • Полный механизм эксплуатации IKEv2 (построение пакетов, фрагментация SKF, многопоточный heap grooming, ROP-цепочка, примитивы произвольного чтения/записи).
  • Механизмы обхода Windows Defender, AMSI и ETW.
  • Встроенный обратный слушатель (reverse shell listener) на порту 4444.
  • Частичный GUI (ListView, ComboBox, строка состояния) для инспекции подозрительных областей памяти.

Архитектура кода

1. Слой обфускации (EpSi_OBF_ENDL / вдохновлён obfusheader)

В коде используется тяжёлый слой обфускации, активируемый при компиляции через #define EpSi_OBF_ENDL. Основан на obfusheader.h, адаптирован и расширен.

Ложные бинарные сигнатуры (FAKE_SIGNS == 1)

В бинарник внедряются пользовательские PE-секции для обмана сканеров известных протекторов:

  • .vmp0, .vmp1, .vmp2 → VMProtect
  • UPX0 → 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) и т.д.
  • Закодированные строки, имитирующие Enigma (0x45,0x6e,0x69,...), Denuvo (0x64,0x65,0x6E,...).
  • Массив FAKE_DONGLE[], имитирующий аппаратные ключи: skeydrv.dll, HASPDOSDRV, MARXDEV1.SYS, WIBUKEY, SNTNLUSB, RNBOspro и т.д.

Арифметическая виртуальная машина (VIRT == 1)

Все арифметические и логические операции могут быть направлены через внутреннюю ВМ (Obfh_VirtualMachine):

  • Опкоды (OP__ADD, OP__SUB, ..., OP__NOP) генерируются случайным образом во время компиляции с помощью __COUNTER__ и RND().
  • Каждый опкод зашифрован: _VM_ENCRYPT_INT(value) = (value - _VM_MUTATOR_KEY) * ~SALT_CMD.
  • Операнды засаливаются, инвертируются (* -1) и передаются вместе с junk-значениями.
  • Сама ВМ нашпигована 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 if (0) { BAD_CALL; } перед настоящим else.
  • #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): помещает строку на стек через compound literal.
  • HIDE_STRING(str): комбинирует obfh_process_hidden_string() + __s_rdtsc() с мёртвым BAD_JMP для скрытия строки в бинарнике.

Прокси API (полное динамическое разрешение)

Все функции CRT и Win32 перенаправляются:

  • CRT через динамический 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.
  • Win32 через обёртки 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), с реконструкцией имени DLL посимвольно через volatile-переменные _k, _e, _r, _n, _e, _l и sprintf.

Анти-отладка (ANTI_DEBUG_V2 == 1)

  • Выделенный поток (ThreadCompareDRs): SuspendThread на главном потоке, GetThreadContext с CONTEXT_DEBUG_REGISTERS, проверка Dr0–Dr3, Dr7, обнуление через ad_ZeroDRs.
  • IsDebuggerPresent_proxy: загружает kernel32.dll динамически, реконструирует имя функции IsDebuggerPresent посимвольно через volatile-переменные (_I, _s, _D, _e, _b, _u, _g, _g, _e, _r, _P, _r, _e, _s, _e, _n, _t), вызов через GetProcAddress.
  • Макрос ANTI_DEBUG: двойная проверка IsDebuggerPresent() || IsDebuggerPresent_proxy(), запускает loop() (бесконечный цикл), .byte 0xED (привилегированная IN), BREAK_STACK_1, ret ASM, затем crash() (int $3 + .byte 0xED, 0x00).

Макросы BREAK_STACK (антианализ стека)

9 вариантов встроенных ASM-последовательностей, вставляемых в чувствительные функции: xor; jz; .byte 0xE8; cpuid (вариации на eax, ebx, edx), ложные опкоды 0x50, 0x20, 0x00, 0xEB, 0xE1 (x86), 0xFF, 0x25, 0xF1, 0xF2, 0xF3, 0xF4 (x86_64).


2. Механизм IKEv2 / Эксплойт

Зависимости

#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 = 0x180000000
  • Смещение double free: g_IkeextDoubleFreeOffset = 0x12B960
  • Обработчик полезной нагрузки IKE: g_IkeextProcessIkePayload = 0x52220
  • PE-каталоги ikeext: Export (0x1790A0), Import (0x179110), Exception (0x183000), Reloc (0x18C000), LoadConfig (0x12AE70), Debug (0x155CD0).
  • Смещения внутренних структур: g_Offset_MMSA_SecurityRealmBlob = 0x208, g_Offset_PacketContext_Blob = 0xC8.
  • Порт IKEv2: 500 (UDP), колбэк оболочки: 4444.

Определённые структуры IKEv2

IKE_HEADER, IKE_SA_PAYLOAD, IKE_PROPOSAL_PAYLOAD, IKE_TRANSFORM_PAYLOAD, IKE_NONCE_PAYLOAD (32 байта nonce), 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).

Пользовательские структуры DDoS

  • IKE_DDOS_AMPLIFIER_PAYLOAD: коэффициент усиления + 64 байта триггера.
  • IKE_DDOS_LOOP_PAYLOAD: счётчик цикла + 32 байта loop_code.
  • IKE_DDOS_MEMORY_PAYLOAD: размер/количество аллокации + 64 байта данных heap spray.
Скачать инструмент