Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
VMPacker — ARM64 ELF 仮想マシン保護システム | Kitploit
ツール/GitHubGitHub/leochen-coremind/vmpacker
組み込みシステムセキュリティエクスプロイトフレームワークIoTセキュリティ脆弱性分析リバースエンジニアリングファジングペネトレーションテストモバイルセキュリティハードウェアセキュリティバイナリ解析アンチボット
477170226ヶ月前Kitploit レビュー済み

人気

すべて見る →

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

すべてのツールを探索

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

すべてのツールを見る →
共有
GitHub
leochen-coremind/vmpacker

VMPacker

ARM64 ELF 仮想マシン保護システム

リポジトリを見る

🛡️ VMPacker

ARM64 ELF 仮想マシン保護システム

ARM64 ネイティブ命令をカスタム VM バイトコードに変換し、関数レベルのコード保護を実現します

🇨🇳 中文文档 • 機能 • アーキテクチャ • クイックスタート • 使い方 • ライセンス


概要

VMPacker は、ARM64 (AArch64) Linux ELF バイナリ向けの 仮想マシン保護 (VMP) システムです。対象関数の ARM64 ネイティブ命令を中間表現にデコードし、カスタム VM バイトコードに変換して、ELF ファイル内に組み込み VM インタプリタを注入します。実行時、保護された関数はネイティブ実行ではなく VM インタプリタによって実行されます。

コアコンセプト

ARM64 ネイティブコード  →  デコード  →  変換  →  カスタム VM バイトコード
                                                      ↓
                    元の ELF  <--  注入  <--  VM インタプリタスタブ

特徴

🔄 命令変換エンジン

  • 63 の VM 命令 — ALU、メモリ、分岐、システムコールなどをカバー
  • テーブル駆動型デコーダ — ARM Architecture Reference Manual に基づくパターンマッチング
  • 121 の ARM64 命令をサポート (ベース A64 100% カバレッジ)。以下を含む:
    • 算術/論理 (ADD, SUB, MUL, AND, ORR, EOR, LSL, LSR, ASR, MVN, BIC, ORN, EON...)
    • 乗算拡張 (MADD, MSUB, SMADDL, SMSUBL, UMADDL, UMSUBL, SMULH, UMULH, UDIV, SDIV)
    • データ移動 (MOV, MOVZ, MOVK, MOVN)
    • メモリアクセス (LDR, STR, LDP, STP, LDPSW, LDADD, CAS, LDAR, STLR, LDAXR, STLXR — 各種幅とアドレッシングモード)
    • 分岐制御 (B, BL, BR, BLR, RET, B.cond, CBZ/CBNZ, TBZ/TBNZ)
    • 条件付き選択 (CSEL, CSINC, CSINV, CSNEG, CCMP, CCMN)
    • ビットフィールド (UBFM, SBFM, BFM, EXTR)
    • ビット操作 (CLZ, CLS, RBIT, REV, REV16, REV32)
    • キャリア算術 (ADC, ADCS, SBC, SBCS)
    • SIMD ロード/ストア (LD1, ST1)
    • システム/バリア (SVC, MRS, MSR, ADRP/ADR, DMB, DSB, ISB, HLT, BRK, PRFM)

🔐 多層保護

層技術説明
VM 保護カスタム ISAランダムにマッピングされたオペコード — リバースエンジニアは命令セマンティクスを直接識別できない
OpcodeCryptor命令ごとのオペコード暗号化enc[pc] = op[pc] ^ (key ^ (pc * 0x9E3779B9))
バイトコード反転実行順序の反転命令が逆順に格納され、インタプリタは逆方向に走査
トークンエントリ3 命令のトランポリン元の関数をトークン化されたエントリに置き換え、実際のバイトコード位置を隠蔽
間接ディスパッチ関数ポインタのジャンプテーブル実行時にスタック上に展開され、IDA のクロスリファレンスを破壊

🖥️ GUI

  • Wails v2 (Go + Vue 3) で構築されたクロスプラットフォームデスクトップアプリ
  • Element Plus UI コンポーネント
  • シンボル関数選択 + 手動関数入力 (アドレス範囲による保護)
  • ワンクリック保護、リアルタイムログ出力
メインインターフェース 関数解析 保護オプション
関数一覧 解析と選択 保護オプション
保護実行 保護完了
リアルタイムログ 保護完了

アーキテクチャ

vmp/
├── cmd/vmpacker/          # CLI エントリポイント
│   ├── main.go            # CLI 引数解析 + オーケストレーション
│   └── vm_interp.bin      # コンパイル済み VM インタプリタ (GCC, go:embed)
│
├── pkg/                   # Go コアライブラリ
│   ├── arch/arm64/        # ARM64 アーキテクチャサポート
│   │   ├── decoder.go     # テーブル駆動型命令デコーダ (vm.Decoder を実装)
│   │   ├── decode_*.go    # デコードパターンテーブル (DP-IMM/DP-REG/Branch/LdSt)
│   │   ├── translator.go  # ARM64 → VM バイトコード変換器
│   │   ├── tr_alu.go      # ALU 命令変換
│   │   ├── tr_branch.go   # 分岐命令変換
│   │   ├── tr_loadstore.go # メモリ命令変換
│   │   ├── tr_bitfield.go # ビットフィールド命令変換
│   │   └── tr_special.go  # 特殊命令 (ADRP/ADR)
│   ├── vm/                # VM ISA 定義
│   │   ├── types.go       # 共有型 + インターフェース (Decoder/Translator/Packer)
│   │   ├── opcodes.go     # 58+ の VM オペコード定義 (ランダムマッピング値)
│   │   └── disasm.go      # VM バイトコード逆アセンブラ
│   └── binary/elf/        # ELF バイナリ操作
│       ├── packer.go      # ELF VMP 注入 (PT_NOTE ハイジャック、トランポリン生成)
│       └── trampoline.go  # トランポリンコード生成
│
├── stub/                  # C VM インタプリタ (PIC フラットバイナリにコンパイル)
│   ├── vm_interp_clean.c  # インタプリタメインループ + エントリポイント
│   ├── vm_types.h         # VM CPU コンテキスト (vm_ctx_t)
│   ├── vm_opcodes.h       # C 側オペコード定義 (opcodes.go と同期)
│   ├── vm_decode.h        # バイトコード読み取りユーティリティ
│   ├── vm_token.h         # トークンエンコード/デコード + ディスクリプタテーブル
│   ├── vm_dispatch.h      # 間接ディスパッチジャンプテーブル
│   ├── vm_crc.h           # CRC32 整合性チェック
│   ├── vm_sections.h      # ハンドラセクション散乱マクロ
│   ├── vm_interp.lds      # リンカスクリプト
│   └── vm_handlers/       # モジュール式命令ハンドラ
│       ├── h_alu.h        # 算術/論理演算
│       ├── h_mem.h        # メモリアクセス
│       ├── h_branch.h     # 分岐/ジャンプ
│       ├── h_cmp.h        # 比較/条件
│       ├── h_mov.h        # データ移動
│       ├── h_stack.h      # スタック (PUSH/POP)
│       └── h_system.h     # システム (SVC/MRS/BLR/BR/RET)
│
├── vmp-gui/               # Wails GUI フロントエンド
│   ├── frontend/          # Vue 3 + Element Plus
│   └── backend/           # Go バックエンドバインディング
│
└── build/                 # プリコンパイル済みツール + テストアーティファクト

モジュラー設計

プロジェクトはインターフェース駆動型のモジュラーアーキテクチャを採用しており、新しい ISA やバイナリ形式への拡張が容易です。

// アーキテクチャデコーダインターフェース — x86、RISC-V に拡張可能
type Decoder interface {
    Decode(raw uint32, offset int) Instruction
    InstName(op int) string
}

// バイトコード変換器インターフェース
type Translator interface {
    Translate(instructions []Instruction) (*TranslateResult, error)
}

// バイナリ形式インジェクタインターフェース — PE、Mach-O に拡張可能
type Packer interface {
    Process() error
}

保護パイプライン

graph LR
    A[入力 ELF] --> B[対象関数の特定]
    B --> C[ARM64 命令の抽出]
    C --> D[ARM64 デコード]
    D --> E[VM バイトコードに変換]
    E --> F[XOR 暗号化バイトコード]
    F --> G[VM インタプリタ注入]
    G --> H[トランポリン生成]
    H --> I[関数エントリの置換]
    I --> J[保護済み ELF 出力]

クイックスタート

前提条件

  • Go 1.21+
  • GCC (aarch64-linux-gnu-gcc) — スタブのコンパイル用
  • Linux ARM64 またはクロスコンパイル環境

インストール

git clone https://github.com/LeoChen-CoreMind/VMPacker.git
cd VMPacker
make all

使い方

関数名で保護

# 単一関数の保護
./vmpacker -func check_license -v -o protected.elf original.elf

# 複数関数の保護
./vmpacker -func "check_license,verify_token" -v -o protected.elf original.elf

アドレス範囲で保護

# アドレス範囲の指定
./vmpacker -addr "0x4006AC-0x400790:main" -v -o protected.elf original.elf

# 混合モード
./vmpacker -addr "0x4006AC-0x400790:main" -func verify -o protected.elf original.elf

ELF 情報の表示

./vmpacker -info input.elf

CLI オプション

オプションデフォルト説明
-func—保護する関数名 (カンマ区切り)
-addr—アドレスで保護 (0xSTART-0xEND[:name])
-oinput.vmp出力ファイルパス
-vfalse詳細出力 (逆アセンブリ表示)
-striptrueシンボルテーブルの削除
-debugfalseARM64 → VM バイトコードデバッグマッピングファイルの生成
-tokentrueトークンベースのエントリモード
-infofalseELF 情報のみ表示

ビルド

VM インタプリタスタブのコンパイル

# 標準ビルド (GCC)
aarch64-linux-gnu-gcc -Os -nostdlib -fPIC -ffreestanding \
  -o stub.elf stub/vm_interp_clean.c \
  -T stub/vm_interp.lds
aarch64-linux-gnu-objcopy -O binary stub.elf vm_interp.bin

CLI ツールのコンパイル

go build -o vmpacker ./cmd/vmpacker/

GUI のビルド

cd vmpacker
make gui

VM ISA リファレンス

VMPacker は、ランダムにマッピングされたオペコード値を持つカスタム命令セットアーキテクチャ (ISA) を定義し、リバースエンジニアリングの難易度を高めます。

📖 エンコード詳細を含む完全なオペコードテーブルについては、中国語ドキュメント を参照してください。

命令カテゴリ

ツールをダウンロード