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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
Maverick — Crystal Palace PIC リンカーと PICO モジュールシステムを使用する Adaptix C2 エージェント | Kitploit
ツール/GitHubGitHub/blacksnufkin/maverick
暗号化/復号化ツールエクスプロイトフレームワークシェルコードポストエクスプロイトコマンド&コントロールバイナリ解析レッドチーミングペイロード開発
GitHubblacksnufkin/maverick

Maverick

Crystal Palace PIC リンカーと PICO モジュールシステムを使用する Adaptix C2 エージェント

リポジトリを見る
109132ヶ月前Kitploit レビュー済み

人気

すべて見る →

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

すべてのツールを探索

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

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

Maverick

Maverick

Crystal Palace(カスタムPIC(Position Independent Code)リンカーとPICOモジュールシステム)で構築されたAdaptix C2エージェントです。トランスポート、タスク、難読化の各コンポーネントが実行時に読み込まれる独立したPICOブロブとして実装された、モジュール式シェルコードエージェントの構築方法を示しています。

注記

このエージェントには回避技術は一切含まれておらず、実際のエンゲージメントでそのまま使用することを意図していません。Crystal PalaceとPICOモジュールシステムを使用してエージェントを構築するためのリファレンス実装です。

Crystal Palace と PICO システム

Crystal Palace は、コンパイル済みのCOFFオブジェクトを受け取り、位置非依存の実行可能ファイルを生成するPICリンカーです。主要な概念は次のとおりです:

  • Core PIC(make pic +gofirst)— メインの実行可能シェルコード。ブートストラップコード、DFRリゾルバー、PICOモジュールがリンクされるセクションマーカーを含みます。ローダーから直接呼び出されます。
  • PICOモジュール(make object)— 独自のコードセクションとデータセクションを持つ自己完結型のコードブロブ。libtcgのPicoLoad()を介してランタイムに読み込まれます。各PICOには、関数ポインタを介して呼び出し可能なエントリポイント(go())があります。
  • DFR(動的関数解決) — Crystal Palaceは、MODULE$Function構文(例:KERNEL32$VirtualAlloc)を、ROR13ハッシュを使用したresolve(mod_hash, func_hash)呼び出しに置き換えます。インポートテーブルはありません。すべての文字列引数(DLL名、関数名)は、バイナリ内に平文を残さないよう、スタック上でchar配列として構築されます。
  • セクションリンク — PICOブロブは、.specファイル内のlinkディレクティブを介して、名前付きセクション(entry_module、transport_moduleなど)でCore PICに埋め込まれます。
  • IMPORTFUNCS — Crystal Palaceの構造体{LoadLibraryA, GetProcAddress}は、PICOモジュールが自身のDFRシンボルを解決できるようにPicoLoad()に渡されます。

ビルドパイプライン

root@kitploit:~
C source → mingw-gcc → COFF objects → Crystal Palace link → raw PIC shellcode → loader (Exe/Dll/Svc)

agent.spec

.specファイルは、Crystal Palaceがすべてをリンクする方法を定義します:

root@kitploit:~
x64:
    load "Bin/obj/main.x64.o"           # Core PIC
        make pic +gofirst
        foreach %LIBS: mergelib %_       # Merge libtcg
        load "Bin/obj/entry.x64.o"       # Entry PICO
            make object
            load "Bin/obj/crypto.x64.o"  #   merge crypto into entry
                merge
            load "Bin/obj/packer.x64.o"  #   merge packer into entry
                merge
            export
            link "entry_module"          #   link at section marker
        load "Bin/obj/transport.x64.o"   # Transport PICO
            make object
            mergelib "lib/LibWinHttp/..."
            export
            link "transport_module"
        ...                              # task_module, obfuscation_module
        dfr "resolve" "ror13"            # resolve all DFR symbols
        export

アーキテクチャ

root@kitploit:~
Core PIC (main.c)
  │
  ├── resolve()              DFR bridge → libtcg hash lookup
  ├── AllocateAndLoadModule() PicoLoad each PICO into shared RWX region
  │
  └── calls entry module go() with pointers to all other modules
        │
        ├── Entry Module (entry.c)
        │     MvState, checkin, transact (RC4 wire format), task loop
        │
        ├── Transport Module (transport.c)
        │     HTTP/HTTPS POST via LibWinHttp
        │
        ├── Task Module (tasks.c)
        │     Command dispatch: whoami (0x30), sleep (0x20), exit (0x10)
        │
        └── Obfuscation Module (obfuscation.c)
              Ekko sleep — timer-queue ROP chain that encrypts module memory
              with RC4 (SystemFunction033) during sleep, decrypts on wake

ランタイム時のメモリレイアウト

root@kitploit:~
┌─────────────────────────────┐
│ Shared RWX Region           │  VirtualAlloc(PAGE_EXECUTE_READWRITE)
│  ├── Entry code             │  PicoLoad → code here
│  ├── Transport code         │
│  ├── Task code              │
│  └── Obfuscation code       │
├─────────────────────────────┤
│ Entry data (RW)             │  PicoLoad → data here (separate alloc)
│ Transport data (RW)         │
│ Task data (RW)              │
│ Obfuscation data (RW)       │
├─────────────────────────────┤
│ Core PIC (freed after boot) │  Original shellcode, freed by entry module
└─────────────────────────────┘

共有RWX領域は、Ekkoがスリープサイクル中に暗号化/復号化する対象です。

ワイヤーフォーマット

すべてのトラフィックはRC4(ストリーム暗号、16バイトキー)で暗号化されます。

root@kitploit:~
Send:    [36B agent_id][RC4(payload)][16B key (first checkin only)]
Receive: [36B agent_id][RC4(response)]

ソースファイル

root@kitploit:~
src_beacon/Source/
├── main.c           Core PIC — DFR resolver, module loading, bootstrap
├── entry.c          Entry PICO — agent state, checkin, task loop, transact
├── transport.c      Transport PICO — HTTP POST via LibWinHttp
├── tasks.c          Task PICO — whoami/sleep/exit dispatch
├── obfuscation.c    Obfuscation PICO — Ekko sleep (timer-queue ROP + RC4)
├── crypto.c         RC4 stream cipher (merged into entry PICO)
├── packer.c         Binary packer BE / parser LE (merged into entry PICO)
└── includes/
    ├── config.h     Build-time defines (UUID, sleep, callback host/port/uri/ssl)
    ├── crypto.h     RC4 API
    ├── packer.h     PackBuf / Parser API
    ├── tcg.h        Crystal Palace libtcg (PicoLoad, findModuleByHash, etc.)
    └── HTTP.h       LibWinHttp API

コマンド

コマンドID説明
whoami

ビルドとデプロイ

前提条件

  • x86_64-w64-mingw32-gcc(MinGWクロスコンパイラ)
  • Go 1.21+
  • Adaptix C2サーバー

Adaptixへのデプロイ

root@kitploit:~
./setup.sh --ax ../AdaptixC2

使用方法

  1. Adaptixサーバーを起動します
  2. MaverickHTTPリスナーを作成します(ホスト、ポート、URI、SSLを設定)
  3. AdaptixクライアントUIからエージェントをビルドします(形式を選択:Exe/Dll/Bin)
  4. Windowsターゲット上でエージェントを実行します
  5. Adaptixコンソールからwhoami、sleep、exitコマンドを使用します

参考文献

  • Kharon
  • PICO-Implant
  • Modular PIC C2 Agents

PoC

Maverick PoC

ツールをダウンロード
0x30
COMPUTER\username を返します
sleep <seconds>0x20コールバック間隔を更新します
exit thread|process0x10エージェントを終了します