首页
社区
课程
招聘
[原创]VMP之我见
发表于: 2025-8-12 12:00 7662

[原创]VMP之我见

2025-8-12 12:00
7662

一、个人对于VMP的理解

1、VMP在被保护代码的地址处将原bytecode抽走,并进入到自己的解释器中解释执行自定义的bytecode虚拟bytecode)。

2、既然是解释执行虚拟bytecode始终就应该围绕着取指--译码--执行,这个流程。

3、进入解释器,首先要找到2块最重要的内存,也可以理解为2个数组——虚拟bytecode数组和虚拟reg数组。

4、对取指--译码--执行的细化:

(1)取指:取操作码和操作数

1.1)、虚拟PC =虚拟bytecode数组首地址+ bytecode_index*bytecode_type(虚拟PC的更新可以分为更新下标和更新指针——更新下标:先通过bytecode数组首地址+ bytecode_index*bytecode_type得到PC,再进行取指并通过instruction_length更新bytecode_index;更新指针:直接通过PC取指,取指后通过instruction_length直接更新PC)。

1.2)、通过虚拟PC取出操作码和操作数(此过程可以在Handler内,也可以在Handler外)。

(2)译码:

2.1)、通过操作码找到对应的Handler

2.2)、通过操作数(虚拟reg数组下标)找到对应的虚拟reg

2.3)、通过真实的指令对虚拟reg的行为进行模拟。

3)执行:将结果赋值给虚拟reg


二、根据取指--译码--执行的原理(其它的细节不去赘述),对5VMP解释器的vm_add进行分析(本文都是静态分析,若有疏漏请指点):

1lib_Easy.so     ARM架构


1)取指:取操作码和操作数

1.1)、虚拟PC =虚拟bytecode数组首地址+ bytecode_index*bytecode_type

                                

        此处X5为虚拟PC

                                    

                                    

                                    

        此处X8为虚拟PC

                    

1.2)、通过虚拟PC取出操作码和操作数:


                                

此处X8为操作码1


        此处X9为操作码2

                                

                                

此处

W9为操作数1

W10为操作数2

W11为操作数3

                

2)译码:

2.1)、通过操作码找到对应的Handler

                                  

                                    

         此处X8Handler_xxx_reg1_reg2地址


         

 此处X8Handler_vm_add地址


2.2)、通过操作数(虚拟reg数组下标)找到对应的虚拟reg

                                  

此处

通过操作数1W9)找到VM_REG1

通过操作数2W10)找到VM_REG2

通过操作数3W11)找到VM_REG3


2.3)、通过真实的指令对虚拟reg的行为进行模拟:

    

此处ADD X9, X10, X9 X9= VM_REG1 + VM_REG2


(3)执行:将结果赋值给虚拟reg

此处VM_REG3 = X9


    

总结:此虚拟机在Handler外取操作码1X8),通过X8找到Handler_xxx_reg1_reg2,在Handler_xxx_reg1_reg2内取操作码2X9),通过X9找到Handler_vm_add;在Handler内取操作码X9,通过操作码X9找到下一个Handler,并在Handler内更新PCPC=PC+4instruction_length4)。


2、libsgmainso-6.7.250421.so ARM架构

地址0x000000000017E1D8vm_addHandler

1)取指:取操作码和操作数

1.1)、虚拟PC =虚拟bytecode数组首地址+ bytecode_index*bytecode_type

在地址0x000000000017E19CX21为虚拟PC

1.2)、通过虚拟PC取出操作码和操作数:

在地址0x000000000017E1A0W0为操作码

在地址0x000000000017E1D8W11为操作数1

在地址0x000000000017E1E0W12为操作数2

在地址0x000000000017E1ECW16为操作数3

 

2)译码:

2.1)、通过操作码找到对应的Handler

在地址0x000000000017E1A4处通过X1找到对应的handler

2.2)、通过操作数(虚拟reg数组下标)找到对应的虚拟reg

在地址0x000000000017E1DC处通过操作数1找到VM_REG1

在地址0x000000000017E1E4处通过操作数2找到VM_REG2

在地址0x000000000017E1F0处通过操作数3找到VM_REG3

2.3)、通过真实的指令对虚拟reg的行为进行模拟:

在地址0x000000000017E1E8ADD X15, X13, X14

X15 = VM_REG1 + VM_REG2

3)执行:将结果赋值给虚拟reg

在地址0x000000000017E1F0VM_REG3 = X15

总结:此虚拟机第一次在Handler外取操作码,在Handler内取操作数;在Handler内地址0x000000000017E1F4处取出操作码W17,准备通过W17找到下一个Handler,并在地址0x000000000017E1F4同时更新PCPC=PC+0x10instruction_length0x10)。


3、libmtguard.so    ARM架构

地址0x0000000000138BA4开始向后都是vm_addHandler

1)取指:取操作码和操作数

1.1)、虚拟PC =虚拟bytecode数组首地址+ bytecode_index*bytecode_type

在地址0x000000000013A5A4X24为虚拟PCbytecode_index0


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

收藏
免费 237
支持
分享
最新回复 (137)
雪    币: 1196
活跃值: (2132)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
站在巨人的jb上学vm
2025-8-12 13:35
0
雪    币: 2324
活跃值: (4465)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
666
2025-8-12 13:36
0
雪    币: 387
活跃值: (3915)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
站在巨人的jb上学vm
2025-8-12 13:50
0
雪    币: 371
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
5
站在巨人的jb上学vm
2025-8-12 14:02
0
雪    币: 1763
活跃值: (4327)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
6
1
2025-8-12 14:11
0
雪    币: 5896
活跃值: (5620)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
66
2025-8-12 14:51
0
雪    币: 204
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
8
站在巨人的jb上学vm
2025-8-12 14:51
0
雪    币: 4
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
9
666
2025-8-12 14:55
0
雪    币: 144
活跃值: (1553)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
666
2025-8-12 14:55
0
雪    币: 2291
活跃值: (2740)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
666
2025-8-12 14:57
0
雪    币: 156
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
12
vmp还原难度大,如果单纯只是算法还原没多大难度
2025-8-12 15:02
0
雪    币: 4
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
13
111
2025-8-12 15:04
0
雪    币: 7
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
14
111111
2025-8-12 15:16
0
雪    币: 178
活跃值: (929)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
111
2025-8-12 15:21
0
雪    币: 200
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
16
66666
2025-8-12 15:54
0
雪    币: 298
活跃值: (788)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
6666666666666
2025-8-12 16:18
0
雪    币: 0
活跃值: (425)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
111
2025-8-12 16:47
0
雪    币: 136
活跃值: (3708)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
支持啊
2025-8-12 17:21
0
雪    币: 155
活跃值: (3796)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
支持!!!
2025-8-12 17:24
0
雪    币: 2
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
21
大佬,yyds
2025-8-12 17:48
0
雪    币: 2790
活跃值: (5255)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
22
感谢分享
2025-8-12 18:05
0
雪    币: 342
活跃值: (145)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
66
2025-8-12 18:12
0
雪    币: 35
活跃值: (521)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
24
66
2025-8-12 19:15
0
雪    币: 20
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
25
6
2025-8-12 19:25
0
游客
登录 | 注册 方可回帖
返回