首页
社区
课程
招聘
[原创]VMP样本分析
发表于: 2025-10-19 21:37 6059

[原创]VMP样本分析

2025-10-19 21:37
6059

unidbg搭架子

搭完架子后直接拿到trace方便后续分析

入口函数分析

主要调用sub_2BD4,进行加密

sub_2BD4主要调用sub_2D28,入参dword_B2C0为一组内存数据,v5为sub_2BD4的四个入参,off_21CE0为一个长度为8的字节变量,v6为一个中转函数,继续往下可以看到主加密的函数sub_2D82的cfg如下:

第一眼看上去的感觉像控制流平坦化,因为有序,主分发器,基本块,跟预处理器。但是伪C很明显可以看到switch的case不像随机数,而标准的控制流平坦化都是随机数。一般魔改也不会去修改这个case值。入口处有编码数组,所以猜是虚拟机函数

静态分析

一般虚拟机函数肯定要解析opcode,先看下跳转处的汇编

结合trace搜索可以看到

opcode每次取4个字节,统计一下对应的opcode与跳转地址

0x3b     x2=0x40002f70

0x28     x2=0x40003044

0x2f      x2=0x4000333c

0x2       x2=0x40002e50

0xf        x2=0x40002ecc

0x4       x2=0x40002fec

0x3e     x2=0x40002fec

0x15  21   x2=0x40003044

0x36  54   x2=0x40002f70

0x2a  42   x2=0x400030a0

顺着每条opcode解析往下走不难发现PC指针的位置如下:

再看下对应的trace就比较明显了

后面就要开始分析指令了,大概初步扫了一圈,柿子挑软的捏,先找个熟悉的指令开始

opcode:0x28

1.先从虚拟源寄存器w9取出数据,2.加上立即数w10,3.将结果存入虚拟目的寄存器w8 ,其中每个虚拟寄存器占8个字节,x[index] = x21 + 8 + index * 8,实现指令add xd, xn, #imm

opcode:0x15

与0x28实现一样的add 指令,只是取虚拟寄存器的顺序不一样即调整了x21加8与加index * 8的先后顺序

opcode:0x2

1.先从虚拟寄存器w9取出数据 ,2.加上立即数w11, 3.从偏移地址取处数据, 4.存入虚拟寄存器x8,实现指令ldr xd, [xn, #imm]

opcode:0x2f 0x30

这个有两级opcode,1.取虚拟寄存器w8,2.左移w11,3.结果存入w10的虚拟寄存器,实现指令lsl xd, xn, #imm

opcode:0x2f 0x26

非常明显实现指令add xd, xn, xm

opcode 0x2f 0x15

1.取出虚拟寄存器w9,2.将w9的值存入[X19,#-0x18],3.设置[X19,#-0x20]为2,4.设置[X19,#-0x10]为当前PC+8,第一感觉就是跟跳转相关,找trace分析一下,在trace中搜索0x02de4|0x40002e4c|0x03344|0x02dd8|\[x19, #-0x18\]|\[x19, #-0x20\]随便抽取一段分析

执行一条opcode前对应的汇编

执行完一条opcode后对应的汇编

第一条opcode处设置[x19, #-0x18]为跳转地址,[x19, #-0x20]跳转标志2,第二条opcode解析前判断[x19, #-0x20]为2则设置[x19, #-0x20]为3,第二条opcode处理完成后,判断[x19, #-0x20]为3,则会取出[x19, #-0x18]的地址覆盖pc,其中如果跳转地址为sub_2d1c(中转函数)则会用到[x19, #-0x10]作为LR地址使用,第三条opcode执行跳转地址,所以实现指令为blr xn

opcode 0x2f 0x17

也很明显,取出虚拟寄存器w8,w9与后存入w10虚拟寄存器,实现指令orr xd, xn, xt

opcode 0x2f 0x2

1.取出虚拟寄存器w9与w8,2.比较w9与w8,如果w9 <w8则w10置1,否则w10清0,实现指令cmp xd, xn与cset xd, lt

opcode 0x2f 0x19

取虚拟寄存器w9设置到跳转地址[x19, #-0x18],根据trace日志可以定位到w9为0

继续看下loc_3c54

接着看loc_4654

出栈恢复上下文了,所以实现指令为ret


[培训]Windows内核深度攻防:从Hook技术到Rootkit实战!

最后于 2025-10-19 21:41 被HandsomeBro编辑 ,原因:
收藏
免费 27
支持
分享
最新回复 (10)
雪    币: 7
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
感谢分享,yyds
2025-10-19 22:51
0
雪    币: 1495
活跃值: (3698)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
3
感谢感谢分享
2025-10-20 09:45
0
雪    币: 1
活跃值: (990)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
6
2025-10-20 10:45
0
雪    币: 1907
活跃值: (1519)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
5
感谢分享
2025-10-21 12:38
0
雪    币: 6
活跃值: (2235)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
666
2025-10-21 19:43
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
7
666
2025-10-23 10:24
0
雪    币: 13
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
8
虾皮也是这种平坦流+vmp
2025-10-30 20:04
0
雪    币: 200
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
9

大佬有国内dy的分析吗,dy新版本呢看起来vmp实现变了,大佬帮忙分析下呀

最后于 2025-11-21 16:57 被mb_uailolfl编辑 ,原因:
2025-11-21 16:57
0
雪    币: 740
活跃值: (2542)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
10
感谢分享
2025-11-21 18:14
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
11
666
2025-12-9 20:12
0
游客
登录 | 注册 方可回帖
返回