-
-
[原创]开源分享|从零自研 ARM64 虚拟机保护引擎(VMP),2.0 版本已理论覆盖全部 A64 基础指令
-
-
[原创]开源分享|从零自研 ARM64 虚拟机保护引擎(VMP),2.0 版本已理论覆盖全部 A64 基础指令
分享一个我最近开源的项目 VMPacker —— 一套完整的 ARM64 Linux ELF 虚拟机代码保护系统。
不同于动辄数万的商业 VMP 方案,这个项目完全开源 适合学习和研究 VMP 保护的底层实现原理
2.0 里程碑:121 条 ARM64 指令全覆盖
经过两天的深度适配,2.0 版本总算理论覆盖了所有 ARM64 A64 基础指令集——共 121 条,涵盖:
这意味着绝大多数用 C/C++ 编译出的 ARM64 函数都可以被直接保护,不再因为"不支持的指令"而中断。
最初做项目时,仅通过 UPX 魔改加固,防护效果极差,程序频繁被破解,让我束手无策。
后来在网上寻找 ARM64 架构的开源 VMP 虚拟化保护方案,却发现几乎没有成熟可用的项目(付费方案又动辄数万)。
于是我决定从零自研一套 ARM64 指令级虚拟化保护引擎,最终才有了 VMPacker —— 专注于从根源上提升程序的抗逆向、防破解能力。
整个系统分为三个核心模块:
1. 指令解码器(Go)
2. 字节码翻译器(Go)
3. VM 解释器 Stub(C → flat binary)
项目采用接口驱动设计,Decoder / Translator / Packer 三大接口完全解耦,理论上可扩展支持:
GitHub: f01K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6x3k6h3!0o6K9r3g2F1i4K6u0V1b7$3!0J5k6f1#2A6L8X3c8Q4x3V1k6h3e0g2m8S2j5$3E0W2M7R3`.`.
AGPL-3.0 协议,学习研究随意用。如果觉得有帮助,欢迎点个 ⭐ Star 支持一下! PR 和 Issue 也非常欢迎。
这是2.0版本


| 类别 |
指令 |
| 算术/逻辑 |
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 |
| 层级 |
技术 |
作用 |
| Opcode 随机映射 |
每次生成不同的指令编码 |
逆向者无法直接识别语义 |
| OpcodeCryptor |
enc[pc] = op[pc] ^ (key ^ (pc * 0x9E3779B9)) |
静态分析极度困难 |
| 字节码逆序 |
指令倒序存储,解释器反向遍历 |
增加分析复杂度 |
| Token 入口 |
3 指令跳板替换原函数 |
隐藏实际字节码位置 |
| 间接派遣 |
栈上运行时填充函数指针表 |
破坏 IDA 交叉引用分析 |
| 类别 |
指令 |
| 算术/逻辑 |
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 |
[培训]Windows内核深度攻防:从Hook技术到Rootkit实战!