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

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

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

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

ツールディレクトリ

カテゴリ

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

人気

すべて見る →

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

すべてのツールを探索

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

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

VMPacker

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

リポジトリを見る

🛡️ VMPacker

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

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

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


概要

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

コアコンセプト

root@kitploit:~
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)

🔐 多層保護

🖥️ GUI

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

アーキテクチャ

root@kitploit:~
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 やバイナリ形式への拡張が容易です。

root@kitploit:~
// アーキテクチャデコーダインターフェース — 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
}

保護パイプライン

root@kitploit:~
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 またはクロスコンパイル環境

インストール

root@kitploit:~
git clone https://github.com/LeoChen-CoreMind/VMPacker.git
cd VMPacker
make all

使い方

関数名で保護

root@kitploit:~
# 単一関数の保護
./vmpacker -func check_license -v -o protected.elf original.elf

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

アドレス範囲で保護

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

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

ELF 情報の表示

root@kitploit:~
./vmpacker -info input.elf

CLI オプション

ビルド

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

root@kitploit:~
# 標準ビルド (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 ツールのコンパイル

root@kitploit:~
go build -o vmpacker ./cmd/vmpacker/

GUI のビルド

root@kitploit:~
cd vmpacker
make gui

VM ISA リファレンス

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

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

命令カテゴリ

ロードマップ

  • 完全な GUI 統合 — GUI ↔ バックエンド保護エンジンの完全統合
  • ハイブリッドモード — 部分的なネイティブ実行 + 部分的な VM 保護
  • 動的オペコードマッピング — 保護実行ごとに一意の ISA マッピングを生成

コントリビューション

コントリビューションを歓迎します。以下のガイドラインに従ってください。

  1. リポジトリをフォーク
  2. 機能ブランチを作成: git checkout -b feature/new-arch
  3. 変更をコミット: git commit -m 'feat: add x86_64 decoder'
  4. ブランチをプッシュ: git push origin feature/new-arch
  5. プルリクエストを作成

コミット規約

Conventional Commits に従います。

  • feat: 新機能
  • fix: バグ修正
  • refactor: コードリファクタリング
  • docs: ドキュメント
  • test: テスト

ライセンス

このプロジェクトは AGPL-3.0 ライセンス の下で提供されています。

なぜ AGPL-3.0 なのか:

  • ✅ 強いコピーレフト — 変更や派生物は同じライセンスでオープンソース化する必要があります
  • ✅ ネットワーク使用条項 — このソフトウェアの機能をネットワークサービスとして提供する場合も、ソースコードの公開が必要です
  • ✅ コア技術の保護 — 保護エンジンのクローズドソースでの商用利用を防止します
  • ✅ コミュニティフレンドリー — 自由に学習、研究、改善でき、改善点は共有する必要があります
  • ✅ 商用ライセンス — クローズドソースでの商用利用については、作者に商用ライセンスについてお問い合わせください

⚠️ 免責事項

本ソフトウェアは「現状のまま」提供され、明示的または黙示的な一切の保証 (商品性、特定目的への適合性、権利非侵害を含むがこれに限らない) を負いません。いかなる場合においても、著作者または著作権保持者は、契約行為、不法行為、その他一切の行為に基づく如何なる請求、損害、その他の責任も負いません。

このプロジェクトは、ソフトウェア開発者に正当な知的財産保護を提供し、商用ソフトウェアにおけるコアアルゴリズムや重要なコードを不正なリバースエンジニアリングや盗難から保護することを目的としています。

利用者への注意:

  1. 本ソフトウェアを使用する際は、管轄区域のすべての適用される法律および規制を遵守する必要があります
  2. 本ソフトウェアを違法な目的 (マルウェア開発、セキュリティ監査の回避、他者の知的財産権の侵害、コンピュータシステムのセキュリティ侵害を含むがこれに限らない) に使用することを固く禁じます
  3. 著作者は、本ソフトウェアの使用に起因する直接的または間接的な結果について一切の責任を負いません
  4. 本ソフトウェアをダウンロード、使用、または配布することにより、上記の条件を読んで同意したものとみなされます

作者

LeoChen — @LeoChen-CoreMind

Copyright © 2026 LeoChen. All rights reserved.

ツールをダウンロード
層技術説明
VM 保護カスタム ISAランダムにマッピングされたオペコード — リバースエンジニアは命令セマンティクスを直接識別できない
OpcodeCryptor命令ごとのオペコード暗号化enc[pc] = op[pc] ^ (key ^ (pc * 0x9E3779B9))
バイトコード反転実行順序の反転命令が逆順に格納され、インタプリタは逆方向に走査
トークンエントリ3 命令のトランポリン元の関数をトークン化されたエントリに置き換え、実際のバイトコード位置を隠蔽
間接ディスパッチ関数ポインタのジャンプテーブル実行時にスタック上に展開され、IDA のクロスリファレンスを破壊
メインインターフェース関数解析保護オプション
関数一覧解析と選択保護オプション
保護実行保護完了
リアルタイムログ保護完了
オプションデフォルト説明
-func—保護する関数名 (カンマ区切り)
-addr—アドレスで保護 (0xSTART-0xEND[:name])
-oinput.vmp出力ファイルパス
-vfalse詳細出力 (逆アセンブリ表示)
-striptrueシンボルテーブルの削除
-debugfalseARM64 → VM バイトコードデバッグマッピングファイルの生成
-tokentrueトークンベースのエントリモード
-infofalseELF 情報のみ表示
カテゴリ個数説明
データ移動3MOV_IMM64, MOV_IMM32, MOV_REG
算術/論理21ADD, SUB, MUL, XOR, AND, OR, SHL, SHR, ASR, NOT, ROR, UMULH + _IMM バリアント
メモリアクセス8LOAD/STORE 8/16/32/64
分岐/ジャンプ13JMP, JE, JNE, JL, JGE, JGT, JLE, JB, JAE, JBE, JA, TBZ, TBNZ
比較6CMP, CMP_IMM, CCMP_REG, CCMP_IMM, CCMN_REG, CCMN_IMM
スタック2PUSH, POP
システム/特殊8NOP, HALT, RET, CALL_NATIVE, CALL_REG, BR_REG, SVC, MRS
SIMD2VLD16, VST16
合計63