Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
IKEV2-POC — IKEv2, ikeext.dll, CVE-2026-33824, ダブルフリー, ヒープグルーミング, ROP, SKFフラグメンテーション, Windowsエクスプロイト, アンチデバッグ, 難読化, APIフック, シェルコード, リバースシェル | Kitploit
ツール/GitHubGitHub/epsilonpointori/ikev2-poc
エクスプロイトフレームワークリバースエンジニアリングシェルコードコマンド&コントロールペイロード開発バイナリエクスプロイト
GitHubepsilonpointori/ikev2-poc

IKEV2-POC

IKEv2, ikeext.dll, CVE-2026-33824, ダブルフリー, ヒープグルーミング, ROP, SKFフラグメンテーション, Windowsエクスプロイト, アンチデバッグ, 難読化, APIフック, シェルコード, リバースシェル

リポジトリを見る
4142ヶ月前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

EpSiLoNPoInTIkEv2.cpp

⚠️ 最終調整中のプロジェクト。現状では完全に機能しません。


説明

EpSiLoNPoInTIkEv2.cpp は、Windows を標的とした C/C++ エクスプロイトのプロトタイプであり、ikeext.dll(Windows の IKEv2 ドライバ)における ダブルフリー タイプのエクスプロイトを中心に開発されています。研究過程で CVE-2026-33824 として参照されています。

このプロジェクトには以下が含まれます:

  • 完全な難読化層(仮想マシン、制御フロー難読化、文字列隠蔽、偽のバイナリ署名、インライン ASM による解析対策)。
  • 完全な IKEv2 エクスプロイトエンジン(パケット構築、SKF フラグメンテーション、マルチスレッドヒープグルーミング、ROP チェーン、任意読み取り/書き込みプリミティブ)。
  • Windows Defender、AMSI、ETW の回避メカニズム。
  • ポート 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)

すべての算術演算および論理演算は、内部 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_*(インライン 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 の前にデッドな 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)のチェーンに難読化され、 揮発性変数 _k, _e, _r, _n, _e, _l と sprintf を使用して DLL 名を文字ごとに再構築します。

アンチデバッグ (ANTI_DEBUG_V2 == 1)

  • 専用スレッド (ThreadCompareDRs):メインスレッドを SuspendThread、GetThreadContext を CONTEXT_DEBUG_REGISTERS で呼び出し、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:二重チェック IsDebuggerPresent() || IsDebuggerPresent_proxy()、 loop() (無限ループ) をトリガー、.byte 0xED (特権 IN)、BREAK_STACK_1、ASM ret、 次に crash() (int $3 + .byte 0xED, 0x00)。

BREAK_STACK マクロ (スタック解析対策)

機密関数に挿入されるインライン ASM シーケンスの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
  • ダブルフリーオフセット:g_IkeextDoubleFreeOffset = 0x12B960
  • IKE ペイロードハンドラ:g_IkeextProcessIkePayload = 0x52220
  • ikeext の PE ディレクトリ: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_GROOM_CONTEXT:ヒープハンドル、ターゲットアドレス、スレッド、stop_flag、allocated_chunks。
  • HEAP_GROOM_THREAD_PARAMS:チャンクサイズ、反復回数、スレッド ID、SRWLOCK、use_nt_allocate。
  • GROOM_CONFIG:スレッド数、反復回数、遅延、チャンクサイズ、最小/最大解放%。
  • パラメータ:4 スレッド、0x1000 のチャンク、1000 回の反復、断片化 30–70%。

ROP チェーン

必要なすべてのガジェットを含む完全な 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、sub_rsp、stack_pivot。 512 ガジェットの配列 (rop_chain[MAX_ROP_CHAIN_SIZE])。

ROP ガジェットスキャナー

モジュール内のガジェットを特定するための ~50 以上のバイトシグネチャパターンを含む g_rop_patterns[] テーブル: pop rax; ret、pop rcx; ret、pop rdx; ret、...、mov [rcx], rax; ret、 mov rax, [rcx]; ret、jmp rsp、VirtualProtect プロローグ、 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() → サンドボックス/VM が検出された場合は終了。
  3. disable_amsi()、disable_defender()、disable_etw()、patch_etw()。
  4. start_shell_listener() → ポート 4444 でリバースシェルリスナーを起動。
  5. argv[1] (ターゲット IP) + argv[2] (ポート、デフォルト 500) をパース。
  6. init_udp_socket() + inet_pton + test_target_reachability()。
  7. フラグメント化された IKEv2 パケット (SKF、最大 SKF_FRAGMENTS + 1 パケット) の構築と送信。
  8. ダブルフリーのトリガー、ヒープグルーミング、シェルコードの配置、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 チェーンは構築されていますが、シェルコードの配置とアクティベーションは現在の状態では完全には統合されていません。
  • GUI の一部 (ListView、ComboBox、領域スキャン) は部分的に統合されています。
  • ビルドシステム、runassys/ の依存関係、およびリンクされたライブラリの調整なしでは、プロジェクトはコンパイルできない可能性があります。

免責事項

このリポジトリには、低レベルネットワークエクスプロイトベクター (IKEv2/ikeext.dll、Windows) をターゲットとした攻撃的セキュリティ研究のプロトタイプが含まれています。

このコードの使用は、明示的な許可があるテスト、研究、またはラボ環境に厳密に制限されています。

著者は、このコードの違法、無許可、または有害な使用について一切の責任を負いません。コードは現状のまま提供され、動作、安定性、または副作用の不存在についての保証はありません。

プロジェクトはまだ最終調整中であり、現状では完全に機能しません。

ツールをダウンロード
HeapFree
GlobalAlloc
GlobalFree
GetTempPath
SetEvent
ResetEvent
Sleep
memmove
GetParent
GetWindowRect
GetClientRect
SetWindowPos
SetConsoleTextAttribute
GetDesktopWindow
GetStockObject