Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

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

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

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

工具目录

分类

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

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
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 解释执行被保护函数。

核心理念

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

🔐 多层防护机制

🖥️ GUI 界面

  • 基于 Wails v2 (Go + Vue 3) 的跨平台桌面应用
  • Element Plus UI 组件
  • 支持符号函数选择 + 手动添加函数(按地址范围保护)
  • 一键保护,日志实时输出

Architecture

root@kitploit:~
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/                 # 预编译工具 + 测试产物

模块化设计

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

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]

Quick Start

前置要求

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

安装

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

Usage

按函数名保护

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 选项

Building

编译 VM 解释器 Stub

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

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

编译 CLI 工具

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

编译 GUI

root@kitploit:~
cd vmpacker
make gui

VM ISA Reference

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

操作码分类

📦 数据移动 (3 条)
🔢 算术/逻辑 (21 条)
💾 内存访问 (8 条)
🔀 分支/跳转 (13 条)
⚙️ 系统/特殊 (13 条)

Roadmap

  • GUI 完整适配 — 完善 GUI 与后端保护引擎的完整集成
  • 混合模式 — 部分指令原生执行 + 部分 VM 保护
  • 动态操作码映射 — 每次保护生成不同 ISA 映射

Contributing

欢迎贡献代码!请遵循以下规范:

  1. Fork 本仓库
  2. 创建特性分支: git checkout -b feature/new-arch
  3. 提交更改: git commit -m 'feat: add x86_64 decoder'
  4. 推送分支: git push origin feature/new-arch
  5. 创建 Pull Request

Commit Convention

采用 Conventional Commits 规范:

  • feat: 新功能
  • fix: Bug 修复
  • refactor: 重构
  • docs: 文档
  • test: 测试

License

本项目采用 AGPL-3.0 License 开源协议。

为什么选择 AGPL-3.0:

  • ✅ 强 Copyleft — 任何修改或衍生作品必须以相同协议开源
  • ✅ 网络使用条款 — 通过网络服务提供本软件功能时,也必须公开源码
  • ✅ 保护核心技术 — 防止他人将核心保护引擎闭源商用
  • ✅ 社区友好 — 允许学习、研究、改进,但改进必须回馈社区
  • ✅ 商业许可 — 如需闭源商用,可联系作者获取商业许可

⚠️ Disclaimer / 免责声明

中文版

本软件按"原样"(AS IS)提供,不附带任何形式的明示或暗示担保,包括但不限于对适销性、特定用途适用性和非侵权性的担保。在任何情况下,作者或版权持有人均不对因使用或无法使用本软件而产生的任何索赔、损害或其他责任负责,无论是在合同诉讼、侵权诉讼还是其他诉讼中。

本项目的设计初衷是为软件开发者提供合法的知识产权保护手段,帮助保护商业软件中的核心算法和关键代码不被轻易逆向或盗用。

使用者须知:

  1. 使用本软件时,您必须遵守所在国家/地区的法律法规
  2. 禁止将本软件用于任何非法目的,包括但不限于:恶意软件开发、规避安全审计、侵犯他人知识产权、破坏计算机系统安全等
  3. 作者不对任何人使用本软件造成的直接或间接后果承担法律责任
  4. 下载、使用或分发本软件即表示您已阅读并同意上述条款

English Version

THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

This project is designed to provide legitimate intellectual property protection for software developers, helping to safeguard core algorithms and critical code in commercial software from unauthorized reverse engineering or theft.

User Notice:

  1. You must comply with all applicable laws and regulations in your jurisdiction when using this software
  2. It is strictly prohibited to use this software for any illegal purpose, including but not limited to: malware development, circumventing security audits, infringing on others' intellectual property rights, or compromising computer system security
  3. The author(s) shall not be held liable for any direct or indirect consequences resulting from any person's use of this software
  4. By downloading, using, or distributing this software, you acknowledge that you have read and agreed to the above terms

Author

LeoChen — @LeoChen-CoreMind

Copyright © 2026 LeoChen. All rights reserved.

下载工具
防护层技术说明
VM 保护自定义 ISA随机映射操作码,逆向者无法直接识别指令含义
OpcodeCryptor逐指令 opcode 加密enc[pc] = op[pc] ^ (key ^ (pc * 0x9E3779B9))
字节码反转执行序反转指令按逆序存储,解释器反向遍历
Token 入口3 指令跳板原函数替换为 token 化入口,隐藏实际字节码位置
间接 Dispatch函数指针跳转表栈上运行时填充,断裂 IDA 交叉引用
主界面函数分析保护选项
目标函数列表函数分析选择保护选项配置
保护执行保护完成
实时日志输出保护完成反馈
选项默认值说明
-func—要保护的函数名(逗号分隔)
-addr—按地址保护(格式: 0xSTART-0xEND[:name])
-oinput.vmp输出文件路径
-vfalse详细输出(显示反汇编)
-striptrue清除符号表
-debugfalse生成 ARM64 → VM 字节码对照文件
-tokentrueToken 化入口模式
-infofalse仅打印 ELF 信息
操作码助记符格式说明
0x5AMOV_IMM64[op][r][imm64] 10B64 位立即数加载
0x49MOV_IMM32[op][r][imm32] 6B32 位立即数加载
0x2FMOV_REG[op][d][s] 3B寄存器间移动
操作码助记符格式说明
0x37ADD[op][d][n][m] 4B加法
0x6ESUB[op][d][n][m] 4B减法
0x83MUL[op][d][n][m] 4B乘法
0x1BXOR[op][d][n][m] 4B异或
0x4DAND[op][d][n][m] 4B与
0x72OR[op][d][n][m] 4B或
0xAESHL[op][d][n][m] 4B逻辑左移
0xF1SHR[op][d][n][m] 4B逻辑右移
0xDAASR[op][d][n][m] 4B算术右移
0x08NOT[op][d][n] 3B按位取反
0x3DROR[op][d][n][m] 4B循环右移
0xF2UMULH[op][d][n][m] 4B无符号高位乘
0xE5ADD_IMM[op][d][s][imm32] 7B立即数加
0x78SUB_IMM[op][d][s][imm32] 7B立即数减
0x3CXOR_IMM[op][d][s][imm32] 7B立即数异或
0xD9AND_IMM[op][d][s][imm32] 7B立即数与
0x6BOR_IMM[op][d][s][imm32] 7B立即数或
0xB3MUL_IMM[op][d][s][imm32] 7B立即数乘
0x7ASHL_IMM[op][d][s][imm32] 7B立即数左移
0x8CSHR_IMM[op][d][s][imm32] 7B立即数右移
0x9DASR_IMM[op][d][s][imm32] 7B立即数算术右移
操作码助记符格式说明
0x91LOAD8[op][d][b][off16] 5B字节加载
0xE7LOAD16[op][d][b][off16] 5B半字加载
0xA4LOAD32[op][d][b][off16] 5B字加载
0xB7LOAD64[op][d][b][off16] 5B双字加载
0xD2STORE8[op][b][s][off16] 5B字节存储
0xE8STORE16[op][b][s][off16] 5B半字存储
0x19STORE32[op][b][s][off16] 5B字存储
0x2ASTORE64[op][b][s][off16] 5B双字存储
操作码助记符格式说明
0x44JMP[op][target32] 5B无条件跳转
0x58JE[op][target32] 5B等于跳转
0xBBJNE[op][target32] 5B不等跳转
0x15JL[op][target32] 5B有符号小于
0x29JGE[op][target32] 5B有符号大于等于
0x36JGT[op][target32] 5B有符号大于
0x47JLE[op][target32] 5B有符号小于等于
0x52JB[op][target32] 5B无符号小于
0x64JAE[op][target32] 5B无符号大于等于
0x53JBE[op][target32] 5B无符号小于等于
0x65JA[op][target32] 5B无符号大于
0x16TBZ[op][r][bit][t32] 7B位测试为零跳转
0x17TBNZ[op][r][bit][t32] 7B位测试非零跳转
操作码助记符格式说明
0xC3NOP[op] 1B空操作
0x00HALT[op] 1B停机
0xEERET[op][r] 2B返回
0x63PUSH[op][r] 2B入栈
0x27POP[op][r] 2B出栈
0xABCALL_NATIVE[op][imm64] 9B原生函数调用
0xBCCALL_REG[op][rn] 2B寄存器间接调用 (BLR)
0xCDBR_REG[op][rn] 2B寄存器间接跳转 (BR)
0x9FCMP[op][n][m] 3B寄存器比较
0xA1CMP_IMM[op][n][imm32] 6B立即数比较
0x1ESVC[op][imm16] 3B系统调用
0x1FUDIV[op][d][n][m] 4B无符号除法
0x20MRS[op][d][sysreg16] 4B读系统寄存器