Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

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

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

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

工具目录

分类

查看所有分类
Loading categories
VMPacker — ARM64 ELF 虚拟机保护系统 | Kitploit
工具/GitHubGitHub/leochen-coremind/vmpacker
嵌入式系统安全漏洞利用框架物联网安全漏洞分析逆向工程模糊测试渗透测试移动安全硬件安全二进制分析反机器人
477170226个月前Kitploit 审核通过

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
GitHub
leochen-coremind/vmpacker

VMPacker

ARM64 ELF 虚拟机保护系统

查看仓库

🛡️ VMPacker

ARM64 ELF Virtual Machine Protection System

将 ARM64 原生指令翻译为自定义虚拟机字节码,实现函数级代码保护

Features • Architecture • Quick Start • Usage • Building • License


Overview

VMPacker 是一个针对 ARM64 (AArch64) Linux ELF 二进制文件的虚拟机代码保护(VMP)系统。它将目标函数的原生 ARM64 指令解码为中间表示,再翻译为自定义 VM 字节码,并将嵌入式 VM 解释器注入 ELF 文件中,运行时由 VM 解释执行被保护函数。

核心理念

ARM64 Native Code  →  Decode  →  Translate  →  Custom VM Bytecode
                                                      ↓
                    Original ELF  ←  Inject  ←  VM Interpreter Stub

Features

🔄 指令翻译引擎

  • 63 条 VM 指令 — 覆盖 ALU、内存、分支、系统调用等
  • 表驱动解码器 — 基于 ARM Architecture Reference Manual 的模式匹配
  • 121 条 ARM64 指令 支持翻译 (base 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逐指令 opcode 加密enc[pc] = op[pc] ^ (key ^ (pc * 0x9E3779B9))
字节码反转执行序反转指令按逆序存储,解释器反向遍历
Token 入口3 指令跳板原函数替换为 token 化入口,隐藏实际字节码位置
间接 Dispatch函数指针跳转表栈上运行时填充,断裂 IDA 交叉引用

🖥️ GUI 界面

  • 基于 Wails v2 (Go + Vue 3) 的跨平台桌面应用
  • Element Plus UI 组件
  • 支持符号函数选择 + 手动添加函数(按地址范围保护)
  • 一键保护,日志实时输出
主界面 函数分析 保护选项
目标函数列表 函数分析选择 保护选项配置
保护执行 保护完成
实时日志输出 保护完成反馈

Architecture

vmp/
├── cmd/vmpacker/          # CLI 入口
│   ├── main.go            # 命令行参数解析 + 流程编排
│   └── 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 hijack, 跳板生成)
│       └── trampoline.go  # 跳板代码生成
│
├── stub/                  # C VM 解释器 (编译为 PIC flat binary)
│   ├── vm_interp_clean.c  # 解释器主循环 + 入口点
│   ├── vm_types.h         # VM CPU 上下文 (vm_ctx_t)
│   ├── vm_opcodes.h       # C 侧操作码定义 (与 opcodes.go 同步)
│   ├── vm_decode.h        # 字节码读取工具函数
│   ├── vm_token.h         # Token 编解码 + 描述符表
│   ├── vm_dispatch.h      # 间接 Dispatch 跳转表
│   ├── vm_crc.h           # CRC32 完整性校验
│   ├── vm_sections.h      # Handler Section 分散宏
│   ├── 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/                 # 预编译工具 + 测试产物

模块化设计

项目采用接口驱动的模块化架构,便于扩展到新的指令集和二进制格式:

// 架构解码器接口 — 未来可扩展 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]

Quick Start

前置要求

  • Go 1.21+
  • GCC (aarch64-linux-gnu-gcc) — 编译 stub
  • Python 3.8+ — 自动化脚本
  • Linux ARM64 或交叉编译环境

安装

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

Usage

按函数名保护

# 保护单个函数
./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清除符号表
-debugfalse生成 ARM64 → VM 字节码对照文件
-tokentrueToken 化入口模式
-infofalse仅打印 ELF 信息

Building

编译 VM 解释器 Stub

# 标准版 (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

# OLLVM 混淆版
# 使用 OLLVM 交叉编译器替换 GCC,启用 -mllvm 混淆选项

编译 CLI 工具

# vmpacker (Go 二进制,内嵌 stub blob)
go build -o vmpacker ./cmd/vmpacker/

编译 GUI

cd vmpacker
make gui

VM ISA Reference

VMPacker 定义了一套自定义指令集架构(ISA),操作码采用随机映射值以增加逆向难度。

操作码分类

📦 数据移动 (3 条)
操作码助记符格式说明
0x5AMOV_IMM64[op][r][imm64] 10B64 位立即数加载
0x49MOV_IMM32[op][r][imm32] 6B32 位立即数加载
0x2FMOV_REG[op][d][s] 3B寄存器间移动
🔢 算术/逻辑 (21 条)
下载工具