首页
社区
课程
招聘
[原创]站在巨人的肩膀上:SO中ARM_VMP解释器分析
发表于: 5天前 2706

[原创]站在巨人的肩膀上:SO中ARM_VMP解释器分析

5天前
2706

本人接触VMP也有很长时间了,各位大佬的东西也研究的不少,比如xxvm、小曾、hanbingle、我是小三、krash、金罡等等,我就不一一列举了。其中论详细程度的话莫过于金罡大佬的https://bbs.kanxue.com/thread-282300.htm,本文有一些注释、命名借鉴于金罡大佬的这篇文章。

最近闲着无聊在家准备探一探大厂的APP中VMP的防护强度,于是下载了一个最新版本的。事先声明,本文目的在于学习研究,不要用于非法用途,否则后果自负。

本人文笔不太好,再加上分析过程中可能会有些错误,希望大佬批评指正。


1、首先在VMP解释器入口分析出vm_info,即vm_reg_PC(虚拟指令指针)、VM_REG(虚拟寄存器)等关键信息是通过哪些真实寄存器去保存:

 

vm_info

X27--pVMMemoryEnd

X6--pVMMemoryEnd-0x140  P_vm_reg_PC(Pcontext-8)

pVMMemoryEnd-0x138--VM_REG

[SP,#0x38]--P_vm_reg_PC

X0--vm_reg_PC

2、根据vm_reg_PC分析出虚拟操作码、虚拟操作数:

         

        

 

 

 

并对其进行解析——

 

虚拟操作码:

W15--Opcode[5-0:6]

 

虚拟操作数:

[SP,#0x34]--Opcode>>0x1B Opcode[31-27:5]

[SP,#0x40]--Opcode>>0x1C Opcode[31-28:4]

[SP,#0x44]--Opcode>>0x19 Opcode[31-25:7]

[SP,#0x48]--Opcode>>0xF  Opcode[31-15:17]

[SP,#0x4C]--Opcode>>0x16 Opcode[31-22:10]

[SP,#0x50]--Opcode>>0x8  Opcode[31-8:24]

[SP,#0x54]--Opcode>>0x1A Opcode[31-26:6]

[SP,#0x58]--Opcode>>0xB  Opcode[31-11:21]

[SP,#0x5C]--Opcode>>0x11 Opcode[31-17:15]

[SP,#0x60]--Opcode>>0x15 Opcode[31-21:11]

[SP,#0x64]--Opcode>>0x18 Opcode[31-24:8]

[SP,#0x68]--Opcode>>0x14 Opcode[31-20:12]

[SP,#0x6C]--Opcode>>0xE  Opcode[31-14:18]

[SP,#0x70]--Opcode>>0x10 Opcode[31-16:16]

[SP,#0x74]--Opcode>>0x12 Opcode[31-18:14]

[SP,#0x78]--Opcode>>0x9  Opcode[31-9:23]

[SP,#0x7C]--Opcode>>0xD  Opcode[31-13:19]

 

W3--Opcode>>0x1E   Opcode[31-30:2]

W7--Opcode>>0x1D   Opcode[31-29:3]

W13--Opcode>>0xC   Opcode[31-12:20]

W19--Opcode>>0x2   Opcode[31-2:30]

W20--Opcode>>0x3   Opcode[31-3:29]

W21--Opcode>>0x4   Opcode[31-4:28]

W22--Opcode>>0x17   Opcode[31-23:9]

W23--Opcode>>0x1   Opcode[31-1:30]

W24--Opcode>>0x6   Opcode[31-6:26]

W25--Opcode>>0x5   Opcode[31-5:27]

W26--Opcode>>0xA   Opcode[31-10:22]

W28--Opcode>>0x7   Opcode[31-7:25]

W30--Opcode>>0x13   Opcode[31-19:13]

 

W0--Opcode<<0x7

W1--Opcode<<0x3

W4--Opcode<<0x9

W9--Opcode<<0x2

W10--Opcode<<0x1

W11--Opcode<<0x6

W14--Opcode<<0x4

W16--Opcode<<0x5

W17--Opcode<<0x8

 

3、根据虚拟操作码,找到对应的vm_Handler;在此版本中对vm_Handler进行了地址混淆,并抛弃之前版本的跳转表结构(容易被发现),改用二叉树结构。

多次进行二叉树形式的递归判断:

 

多次用到地址混淆:

 

 

通过对上述二叉树结构的分析,直到分析到每个根节点,梳理出每个vm_Handler对应的地址(部分地址):

W15==0x0--0x4F37C  

W15==0x1--0x                    

W15==0x2--0x506D0

W15==0x3--0x

W15==0x4--0x4FDD8

W15==0x5--0x50EE8

W15==0x6--0x51C74

W15==0x7--0x

W15==0x8--0x4F968

W15==0x9--0x50ADC

W15==0xA--0x51800

W15==0xB--0x502AC

W15==0xC--0x

W15==0xD--0x51260

W15==0xE--0x51F48

W15==0xF--0x4F720

W15==0x10--0x508D0

W15==0x11--0x4FFEC

W15==0x12--0x

W15==0x13--0x

W15==0x14-0x52460

W15==0x15-0x510DC

W15==0x16--0x

W15==0x17--0x4FBE4

W15==0x18--0x50C9C

W15==0x19--0x51A38  

W15==0x1A--0x50454

W15==0x1B--0x

W15==0x1C--0x

W15==0x1D--0x514D8

W15==0x1E--0x5210C

 

W15==0x1F--0x4F570  

W15==0x20--0x507DC

W15==0x21--0x

W15==0x22--0x50FDC

W15==0x23--0x51D64

W15==0x24--0x4FABC

W15==0x25--0x

W15==0x26--0x

W15==0x27--0x50BB8

W15==0x28--0x

W15==0x29--0x

W15==0x2A--0x

W15==0x2B--0x5191C                  

W15==0x2C--0x50348                        

W15==0x2D--0x51394                        

W15==0x2E--0x5200C

W15==0x2F--0x4F858

W15==0x30--0x52368                      

W15==0x31--0x509D4

W15==0x32--0x

W15==0x33-0x5012C

W15==0x34--0x


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 129
支持
分享
最新回复 (62)
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
接私活吗,逆向控制
5天前
0
雪    币: 231
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
学习一下
5天前
0
雪    币: 542
活跃值: (1242)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
学习下
5天前
0
雪    币:
活跃值: (755)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
学习一下
5天前
0
雪    币: 144
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
6
学习一下
5天前
0
雪    币: 117
活跃值: (1321)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
666
5天前
0
雪    币: 2075
活跃值: (2418)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
过来瞧瞧
5天前
0
雪    币: 10
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
9
感谢大佬分享
5天前
0
雪    币: 16
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
10
学习下
5天前
0
雪    币: 408
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
11
666
5天前
0
雪    币: 523
活跃值: (5568)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
12
2
5天前
0
雪    币: 73
活跃值: (469)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
666
5天前
0
雪    币: 219
活跃值: (911)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
111
5天前
0
雪    币: 18
活跃值: (735)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
666
5天前
0
雪    币: 67
活跃值: (532)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
1
5天前
0
雪    币: 816
活跃值: (2003)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
17
1
5天前
0
雪    币: 422
活跃值: (1811)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
似曾相识
5天前
0
雪    币: 38
活跃值: (2539)
能力值: ( LV3,RANK:25 )
在线值:
发帖
回帖
粉丝
19
5天前
0
雪    币: 523
活跃值: (5568)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
20
不是不想搞,就算手机性能顶得住 电量也顶不住啊
5天前
0
雪    币: 6163
活跃值: (19730)
能力值: ( LV13,RANK:357 )
在线值:
发帖
回帖
粉丝
21
感谢分享,蹲下一篇分析
5天前
0
雪    币: 48
活跃值: (3739)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
感谢分享,蹲下一篇分析
5天前
0
雪    币: 335
活跃值: (3314)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
666
5天前
0
雪    币: 288
活跃值: (1087)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
学习????
5天前
0
雪    币: 4
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
25
6
5天前
1
游客
登录 | 注册 方可回帖
返回