Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
IKEV2-POC — IKEv2, ikeext.dll, CVE-2026-33824, 双重释放, 堆风水, ROP, SKF分片, Windows漏洞利用, 反调试, 混淆, API钩子, Shellcode, 反向Shell | Kitploit
工具/GitHubGitHub/epsilonpointori/ikev2-poc
漏洞利用框架逆向工程Shellcode命令与控制Payload 开发二进制利用
GitHubepsilonpointori/ikev2-poc

IKEV2-POC

IKEv2, ikeext.dll, CVE-2026-33824, 双重释放, 堆风水, ROP, SKF分片, Windows漏洞利用, 反调试, 混淆, API钩子, Shellcode, 反向Shell

查看仓库
4142个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

EpSiLoNPoInTIkEv2.cpp

⚠️ 项目正在收尾阶段。目前状态尚未完全可用。


描述

EpSiLoNPoInTIkEv2.cpp 是一个针对 Windows 的 C/C++ 漏洞利用原型,基于 ikeext.dll(Windows 的 IKEv2 驱动程序)中的 double-free 漏洞开发,研究过程中暂定为 CVE-2026-33824。

该项目包含:

  • 完整的混淆层(虚拟机、控制流平坦化、字符串隐藏、伪造二进制签名、内联反分析汇编)。
  • 完整的 IKEv2 漏洞利用引擎(数据包构建、SKF 分片、多线程堆喷布局、ROP 链、任意读写原语)。
  • 绕过 Windows Defender、AMSI 和 ETW 的机制。
  • 集成的反弹 Shell 监听器,端口 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), etc.
  • 编码字符串模仿 Enigma (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),并附带垃圾值传递。
  • VM 本身充满了 goto、假的负 case、BREAK_STACK_*(内联汇编 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,以在二进制中隐藏字符串。

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, , , , , , , , , , , , , , , 。
  • 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),通过 volatile 变量 _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,通过 volatile 变量(_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)。

BREAK_STACK 宏(反栈分析)

9 种内联汇编序列变体插入到敏感函数中:xor; jz; .byte 0xE8; cpuid(在 eax、ebx、edx 上变化),伪造操作码 0x50、0x20、0x00、0xEB, 0xE1(x86),0xFF, 0x25, 0xF1, 0xF2, 0xF3, 0xF4(x86_64)。


2. IKEv2 引擎 / 漏洞利用

依赖

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

漏洞利用常量

  • 目标:IKEEXT_BASE_ADDRESS = 0x180000000
  • double-free 偏移:g_IkeextDoubleFreeOffset = 0x12B960
  • IKE 负载处理程序:g_IkeextProcessIkePayload = 0x52220
  • ikeext 的 PE 目录:导出 (0x1790A0)、导入 (0x179110)、异常 (0x183000)、重定位 (0x18C000)、加载配置 (0x12AE70)、调试 (0x155CD0)。
  • 内部结构偏移:g_Offset_MMSA_SecurityRealmBlob = 0x208,g_Offset_PacketContext_Blob = 0xC8。
  • IKEv2 端口:500 (UDP),Shell 回调:4444。

定义的 IKEv2 结构

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。

配置的变换: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 字节循环代码。
  • IKE_DDOS_MEMORY_PAYLOAD:分配大小/计数 + 64 字节堆喷数据。

堆喷布局

  • HEAP_GROOM_CONTEXT:堆句柄、目标地址、线程、停止标志、已分配块。
  • HEAP_GROOM_THREAD_PARAMS:块大小、迭代次数、线程 ID、SRWLOCK、use_nt_allocate。
  • GROOM_CONFIG:线程数、迭代次数、延迟、块大小、最小/最大空闲百分比。
  • 参数:4 个线程,0x1000 大小的块,1000 次迭代,碎片率在 30–70% 之间。

ROP 链

完整的 ROP_CHAIN 结构,包含所有必要的 gadget: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、sub_rsp、stack_pivot。 512 个 gadget 的数组(rop_chain[MAX_ROP_CHAIN_SIZE])。

ROP gadget 扫描器

表 g_rop_patterns[] 包含约 50+ 个字节签名模式,用于在模块中定位 gadget: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 等。

全局漏洞利用变量

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;

主流程(main)

  1. InitializeCriticalSection,init_debug_info。
  2. is_hostile_environment() → 如果检测到沙箱/虚拟机则退出。
  3. disable_amsi(),disable_defender(),disable_etw(),patch_etw()。
  4. start_shell_listener() → 反弹 Shell 监听器,端口 4444。
  5. 解析 argv[1](目标 IP)+ argv[2](端口,默认 500)。
  6. init_udp_socket() + inet_pton + test_target_reachability()。
  7. 构建并发送分片的 IKEv2 数据包(SKF,最多 SKF_FRAGMENTS + 1 个数据包)。
  8. 触发 double-free,进行堆喷布局,放置 shellcode,执行 ROP 链。

当前状态

该项目正在收尾阶段,目前尚未完全可用。

  • 某些被引用的函数(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)已声明,但根据构建状态可能不完整或缺失。
  • ikeext 的偏移是静态的,特定于一个精确的 Windows 构建版本。尚未最终确定任何动态偏移解析机制。
  • ROP 链已构建,但 shellcode 的放置和激活在当前状态中尚未完全集成。
  • GUI 的某些部分(ListView、ComboBox、区域扫描)已部分集成。
  • 如果不调整构建系统、runassys/ 依赖项和链接的库,该项目可能无法编译。

免责声明

本仓库包含一个针对低级网络漏洞利用向量(IKEv2/ikeext.dll,Windows)的进攻性安全研究原型。

此代码的使用严格限于您拥有明确授权的测试、研究或实验室环境。

作者对任何非法、未经授权或破坏性使用此代码的行为不承担任何责任。代码按原样提供,不附带任何关于功能、稳定性或不存在不良影响的保证。

该项目仍在收尾阶段,目前状态下尚未完全可用。

下载工具
HeapFree
GlobalAlloc
GlobalFree
GetTempPath
SetEvent
ResetEvent
Sleep
memmove
GetParent
GetWindowRect
GetClientRect
SetWindowPos
SetConsoleTextAttribute
GetDesktopWindow
GetStockObject