首页
社区
课程
招聘
[原创 附源码 Prompt!手把手教你用 AI 自动化还原 VMP 字节码(含实战案例)
发表于: 10小时前 510

[原创 附源码 Prompt!手把手教你用 AI 自动化还原 VMP 字节码(含实战案例)

10小时前
510

AI的崛起彻底改变了网络攻防平衡。
它大幅提升了攻击者能力,并显著降低了高级逆向工程的门槛。
曾经需要逆向专家数周手动分析才可能破解的VMP保护,如今正面临被AI低成本、快速击破的风险。

本文将介绍一个非常简单的 DEMO VMP 方便大家理解VMP的基本原理,然后用 IDA MCP 结合 AI 进行自动化的指令还原。更进一步,自动化还原某APP的VMP保护的指令,附件中包含 DEMO的代码和使用的提示词文件,方便大家复现。

虚拟机保护(VMP)不直接运行原生(ARM64)指令,而是自定义一套字节码指令集,由虚拟机(解释器)负责读取、解码并模拟执行。
通常需要实现:内存读写、寄存器拷贝、加减乘除、逻辑运算、分支跳转、函数调用等基本操作。

该 DEMO VMP 定义了一个结构体来模拟CPU 环境 和 运行状态:

所有计算、临时值都保存在这个结构体里。真实寄存器被映射到这里,调试器看不到直接的寄存器变化。(除非已经逆向出虚拟机的数据结构,然后打印里面的虚拟寄存器。)

DEMO VMP 使用固定 32 位(4字节)的自定义指令,模仿但不兼容 ARM64。高 3 位(bit 29-31)作为主分类(category),决定指令大类:
0x0 → 数据传输(MOV/LDR/STR)
0x1 → 算术(ADD/SUB/MUL)
0x2 → 逻辑(AND/OR/XOR/移位)
0x3 → 控制流(跳转、调用)
0x4 → 比较(CMP/TST)

VMP 的心脏是经典的“取指-解码-执行”循环:

每个 handler 内部再做二级解码:

这个 Demo 展示了 VMP 最核心的防护思路:

而真实商用 Android VMP 通常会再叠加多层复杂防护:

这些组合让手动分析成本极高,也正是 AI 目前最有希望大幅降低门槛的领域。

把 demo VMP 编译后,通过IDA MCP 连接 AI进行分析,提示词:

取决于具体使用的AI模型,有的可能一次性就生成python脚本并执行得到结果了,我这里用 Gemini Agent模式,生成了一个python解析脚本同时也给出了结论:

参考附件 demoVMP.c 中 main 函数附近的代码注释,可以看出除了第二条 ADD 指令还原的常量是错误的,其余指令还原都是正确的。

若AI能够基于这两个手册,较好的逆向出DEMO 的VMP指令字节码,那么就可以把它用到实战上了。
这里测试一个APP的VMP保护,它用于保护一个加密算法,该加密算法用于加密关键的请求数据。

AI 创建并执行解码脚本,最终还原出以下与 ARM64 语义相同的汇编代码:

目前AI逆向还原VMP还是太过于依赖 IDA Pro的反编译结果,如果反编译结果不够完美,比如被混淆保护,那可能会导致一些关键逻辑没法被清晰的还原。
比如这里还原出来了一些 NOP 指令,实际上是为函数调用在做准备。

也许这就是静态分析的局限性吧,因为缺乏了一些运行时的信息,导致难以彻底理解指令的含义。
这里就需要trace分析或者模拟执行了。

AI的崛起已彻底颠覆网络安全攻防平衡:
攻击者能力大幅增强,高级逆向工程门槛显著降低。

过去需要安全专家耗费数周手动拆解的“牢不可破”VMP,现在正面临被AI以极低成本快速攻破的风险。

为应对这一挑战,防御方必须大幅提升VMP解释器本身的混淆强度,
采用花指令、虚假控制流、控制流平坦化等高阶技术,刻意破坏代码逻辑可读性,
以此大幅增加AI自动化分析与还原的难度。

但这场博弈远未结束。攻击者也在利用AI加速反混淆与自动化分析能力,
迫使代码保护技术进入高强度、快节奏的军备竞赛。

防御方必须在现有保护被突破前,快速迭代更强的加密与混淆方案,
不断让攻击者已有的分析成果作废,重新归零,从而在持久对抗中保持主动。

typedef struct {
    uint64_t regs[32];             // 模拟 31 个通用寄存器 + SP/ZR
    uint8_t  memory[MEMORY_SIZE];  // 模拟内存
    uint64_t pc;                   // 程序计数器
    bool     zero_flag;            // Z 标志
    bool     negative_flag;        // N 标志
} Arm64Context;
typedef struct {
    uint64_t regs[32];             // 模拟 31 个通用寄存器 + SP/ZR
    uint8_t  memory[MEMORY_SIZE];  // 模拟内存
    uint64_t pc;                   // 程序计数器
    bool     zero_flag;            // Z 标志
    bool     negative_flag;        // N 标志
} Arm64Context;
while (pc < end) {
    uint32_t insn = bytecode[pc >> 2];          // 取指
    uint8_t category = extract_bits(insn, 29, 3); // 主分类
 
    switch (category) {
        case 0x0: handle_data_transfer(ctx, insn); break;
        case 0x1: handle_arithmetic(ctx, insn);    break;
        case 0x2: handle_logical(ctx, insn);       break;
        // ……
    }
 
    pc += 4// 顺序执行时自动前进
}
while (pc < end) {
    uint32_t insn = bytecode[pc >> 2];          // 取指
    uint8_t category = extract_bits(insn, 29, 3); // 主分类

传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 10小时前 被dreameriii编辑 ,原因: 补充附件
上传的附件:
收藏
免费 58
支持
分享
最新回复 (28)
雪    币: 204
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
6666
10小时前
0
雪    币: 8650
活跃值: (6412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
感谢分享
10小时前
0
雪    币: 2
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
4
11
10小时前
0
雪    币: 80
活跃值: (280)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
11
9小时前
0
雪    币: 7
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
6
感谢分享
7小时前
0
雪    币: 2219
活跃值: (4447)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
感谢分享
7小时前
0
雪    币: 931
活跃值: (534)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
66
6小时前
0
雪    币: 3001
活跃值: (3240)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
666
6小时前
0
雪    币: 153
活跃值: (2116)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
6666
6小时前
0
雪    币: 429
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
11
这是不是太卷了,刚有逆向方法又要被加强修复,这让我们这些新人怎么活啊
5小时前
0
雪    币: 3
活跃值: (978)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
感谢分享
5小时前
0
雪    币: 241
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
13
感谢分享
4小时前
0
雪    币: 2525
活跃值: (2275)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
14
111
4小时前
0
雪    币: 972
活跃值: (2745)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
学习
4小时前
0
雪    币: 1
活跃值: (1015)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
6
4小时前
0
雪    币: 3288
活跃值: (2920)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
1111
4小时前
0
雪    币: 1655
活跃值: (7679)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
分析这些混淆费token吗
3小时前
0
雪    币: 32
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
分析这些混淆费token吗
3小时前
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
20
1111111
3小时前
0
雪    币: 201
活跃值: (550)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
21
1
2小时前
0
雪    币: 200
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
22
6666
1小时前
0
雪    币: 0
活跃值: (2460)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
6666
1小时前
0
雪    币: 20
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
29o
24
学习
55分钟前
0
雪    币: 544
活跃值: (1664)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
6666666
41分钟前
0
游客
登录 | 注册 方可回帖
返回