Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
IKEV2-POC — IKEv2, ikeext.dll, CVE-2026-33824, double free, heap grooming, ROP, SKF fragmentation, exploit do Windows, anti-debug, ofuscação, API hooking, shellcode, shell reverso | Kitploit
Ferramentas/GitHubGitHub/epsilonpointori/ikev2-poc
Frameworks de ExploraçãoEngenharia ReversaShellcodeComando e ControleDesenvolvimento de PayloadsExploração de Binários
GitHubepsilonpointori/ikev2-poc

IKEV2-POC

IKEv2, ikeext.dll, CVE-2026-33824, double free, heap grooming, ROP, SKF fragmentation, exploit do Windows, anti-debug, ofuscação, API hooking, shellcode, shell reverso

Ver Repositório
41há 1 mêsAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

EpSiLoNPoInTIkEv2.cpp

⚠️ Projeto em fase de finalização. NÃO totalmente funcional no estado atual.


Descrição

EpSiLoNPoInTIkEv2.cpp é um protótipo de exploit C/C++ direcionado ao Windows, desenvolvido em torno de uma exploração do tipo double-free em ikeext.dll (driver IKEv2 do Windows), referenciado em pesquisa em andamento como CVE-2026-33824.

O projeto agrupa:

  • Uma camada de ofuscação completa (máquina virtual, embaralhamento de fluxo de controle, ocultação de strings, falsas assinaturas binárias, inline ASM anti-análise).
  • Um motor de exploração IKEv2 completo (construção de pacotes, fragmentação SKF, heap grooming multi-thread, ROP chain, primitivas arbitrárias de leitura/escrita).
  • Mecanismos de bypass do Windows Defender, AMSI e ETW.
  • Um listener de shell reverso integrado na porta 4444.
  • Uma GUI parcial (ListView, ComboBox, barra de status) para inspeção de regiões de memória suspeitas.

Arquitetura do código

1. Camada de ofuscação (EpSi_OBF_ENDL / obfusheader inspirado)

O código usa uma camada pesada de ofuscação ativada na compilação via #define EpSi_OBF_ENDL. Baseado em obfusheader.h, adaptado e estendido.

Falsas assinaturas binárias (FAKE_SIGNS == 1)

Seções PE personalizadas são injetadas no binário para enganar os scanners de protectores conhecidos:

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

Máquina virtual aritmética (VIRT == 1)

Todas as operações aritméticas e lógicas podem ser roteadas em uma VM interna (Obfh_VirtualMachine):

  • Os opcodes (OP__ADD, OP__SUB, ..., OP__NOP) são gerados aleatoriamente na compilação via __COUNTER__ e RND().
  • Cada opcode é criptografado: _VM_ENCRYPT_INT(value) = (value - _VM_MUTATOR_KEY) * ~SALT_CMD.
  • Os operandos são salgados, invertidos (* -1), e passados com junk values.
  • A VM em si é repleta de goto, falsos case negativos, BREAK_STACK_* (inline ASM xor; jz; .byte 0xE8; cpuid), falsos JMP (.byte 0xFF, 0x25) e blocos de falso código x86_64 para enganar os descompiladores.
  • Macros expostas: VM_ADD, , , , , , , , , , , , , , etc.

Controle de fluxo ofuscado (NO_CFLOW != 1)

  • #define if(cond) : cada if injeta uma chamada __s_rdtsc() e um BAD_CALL morto.
  • #define else : injeta um else if (0) { BAD_CALL; } morto antes do verdadeiro else.
  • #define while(...) : condicionado por __s_rdtsc() != 0.1 e uma verificação de ponteiro absurda.
  • #define for(...) : condicionado por OBFUS_CONDITION_BLOCK.
  • #define switch(...) : condicionado por OBFUS_CONDITION_BLOCK.
  • #define break : injeta antes de cada .

Ocultação de strings (HIDE_STRING)

  • STACK_STRING(str) : coloca a string na pilha via compound literal.
  • HIDE_STRING(str) : combina obfh_process_hidden_string() + __s_rdtsc() com BAD_JMP morto para ocultar a string no binário.

Proxies de API (resolução dinâmica completa)

Todas as funções CRT e Win32 são redirecionadas:

  • CRT via GetProcAddress(LoadLibraryA("msvcrt"), ...) dinâmico: printf, scanf, sprintf, strlen, strcmp, strcpy, strtok, memset, memcpy, strchr, strrchr, rand, realloc, calloc, , , , , , , , , , , , , , , .

Anti-debug (ANTI_DEBUG_V2 == 1)

  • Thread dedicada (ThreadCompareDRs): SuspendThread no thread principal, GetThreadContext com CONTEXT_DEBUG_REGISTERS, verificação de Dr0–Dr3, Dr7, zeramento via ad_ZeroDRs.
  • IsDebuggerPresent_proxy : carrega kernel32.dll dinamicamente, reconstrói o nome da função IsDebuggerPresent caractere por caractere via variáveis voláteis (_I, _s, _D, _e, _b, _u, _g, _g, _e, _r, _P, _r, _e, _s, _e, _n, _t), chamada via GetProcAddress.
  • Macro ANTI_DEBUG : dupla verificação , dispara (loop infinito), (IN privilegiado), , ASM, depois ( + ).

Macros BREAK_STACK (antianálise de pilha)

9 variantes de sequências inline ASM inseridas nas funções sensíveis: xor; jz; .byte 0xE8; cpuid (variações em eax, ebx, edx), falsos opcodes 0x50, 0x20, 0x00, 0xEB, 0xE1 (x86), 0xFF, 0x25, 0xF1, 0xF2, 0xF3, 0xF4 (x86_64).


2. Motor IKEv2 / Exploit

Dependências

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

Constantes do exploit

  • Alvo: IKEEXT_BASE_ADDRESS = 0x180000000
  • Offset double free: g_IkeextDoubleFreeOffset = 0x12B960
  • Handler de payload IKE: g_IkeextProcessIkePayload = 0x52220
  • Diretórios PE do ikeext: Export (0x1790A0), Import (0x179110), Exception (0x183000), Reloc (0x18C000), LoadConfig (0x12AE70), Debug (0x155CD0).
  • Offsets de estruturas internas: g_Offset_MMSA_SecurityRealmBlob = 0x208, g_Offset_PacketContext_Blob = 0xC8.
  • Porta IKEv2: 500 (UDP), shell callback: 4444.

Estruturas IKEv2 definidas

IKE_HEADER, IKE_SA_PAYLOAD, IKE_PROPOSAL_PAYLOAD, IKE_TRANSFORM_PAYLOAD, IKE_NONCE_PAYLOAD (32 bytes nonce), IKE_KEY_EXCHANGE_PAYLOAD (DH 256 bytes), IKE_NOTIFY_PAYLOAD, IKE_VENDOR_ID_PAYLOAD, IKE_SKF_FRAGMENT_PAYLOAD.

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

Estruturas DDoS personalizadas

  • IKE_DDOS_AMPLIFIER_PAYLOAD : fator de amplificação + 64 octetos trigger.
  • IKE_DDOS_LOOP_PAYLOAD : contador de loop + 32 octetos loop_code.
  • IKE_DDOS_MEMORY_PAYLOAD : tamanho/contagem de alocação + 64 octetos heap spray data.

Heap grooming

  • HEAP_GROOM_CONTEXT : handle do heap, endereço alvo, threads, stop_flag, allocated_chunks.
  • HEAP_GROOM_THREAD_PARAMS : tamanho do chunk, iterações, thread_id, SRWLOCK, use_nt_allocate.
  • GROOM_CONFIG : thread_count, iterações, delay, chunk_size, % livre min/máx.
  • Parâmetros: 4 threads, chunks de 0x1000, 1000 iterações, fragmentação entre 30–70%.

ROP Chain

Estrutura ROP_CHAIN completa com todos os gadgets necessários: 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 de 512 gadgets ().

Scanner de gadgets ROP

Tabela g_rop_patterns[] de ~50+ padrões de byte-signature para localizar os gadgets nos módulos: 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.

Variáveis globais do exploit

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;

Fluxo principal (main)

  1. InitializeCriticalSection, init_debug_info.
  2. is_hostile_environment() → sair se sandbox/VM detectada.
  3. disable_amsi(), disable_defender(), disable_etw(), patch_etw().
  4. start_shell_listener() → listener reverse shell porta 4444.
  5. Parse argv[1] (IP alvo) + argv[2] (porta, padrão 500).
  6. init_udp_socket() + inet_pton + test_target_reachability().
  7. Construção e envio dos pacotes IKEv2 fragmentados (SKF, até pacotes).

Estado atual

O projeto está em fase de finalização e não está totalmente funcional.

  • Algumas funções referenciadas (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) são declaradas, mas podem estar incompletas ou ausentes dependendo do estado da compilação.
  • Os offsets do ikeext são estáticos e específicos para uma build precisa do Windows. Nenhum mecanismo de resolução dinâmica de offsets foi ainda finalizado.
  • A cadeia ROP está construída, mas o posicionamento e a ativação do shellcode não estão totalmente integrados no estado atual.
  • Algumas partes da GUI (ListView, ComboBox, varredura de regiões) estão parcialmente integradas.
  • O projeto pode não compilar sem ajustes no sistema de build, nas dependências runassys/ e nas bibliotecas vinculadas.

Aviso de isenção

Este repositório contém um protótipo de pesquisa em segurança ofensiva visando um vetor de exploração de rede de baixo nível (IKEv2/ikeext.dll, Windows).

O uso deste código é estritamente reservado a ambientes de teste, pesquisa ou laboratório onde você tenha autorização explícita.

O autor se isenta de toda responsabilidade por qualquer uso ilegal, não autorizado ou prejudicial deste código. O código é fornecido como está, sem garantia de funcionamento, estabilidade ou ausência de efeitos indesejados.

O projeto ainda está em fase de finalização e não está totalmente funcional no estado atual.

Baixar ferramenta
logicoma
__wibu00
__wibu01
PETETRIS
.tw
.rdata
.text
  • Strings codificadas imitando Enigma (0x45,0x6e,0x69,...), Denuvo (0x64,0x65,0x6E,...).
  • Tabela FAKE_DONGLE[] imitando dongles de hardware: 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 via wrappers obfh_int_proxy() em todos os parâmetros: 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 substituído por GetProcAddress_custom: percurso manual do IMAGE_EXPORT_DIRECTORY (parse PE: e_lfanew, IMAGE_NT_HEADERS, IMAGE_DIRECTORY_ENTRY_EXPORT, AddressOfFunctions, AddressOfNames, AddressOfNameOrdinals).
  • LoadLibraryA ofuscado em cadeia de 6 wrappers aninhados (LoadLibraryA_0 a LoadLibraryA_proxy), com reconstrução do nome da DLL caractere por caractere via variáveis voláteis _k, _e, _r, _n, _e, _l e 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
  • Disparo do double free, heap grooming, posicionamento do shellcode, execução da ROP chain.