首页
论坛
课程
招聘
[原创]VMProtect分析(一)
2021-7-6 18:50 8034

[原创]VMProtect分析(一)

2021-7-6 18:50
8034

前言

由于工作需要,经常会接触一些加过壳的软件,VMProtect是其中自己比较'欣赏'的一款加壳软件,曾考虑过做一次庖丁解'V',无奈工作较忙,一直没有合适的机会(太懒),不过,好在终于说服自己开始了言归正传,先从运行时开始。


准备工作

将下述代码编译为控制台X64可执行程序VMP.exe.

#include <stdio.h>
int main()
{
	auto v1 = 1;
	auto v2 = 2;
	auto vsum = v1 + v2;
	printf("1 + 2 = %d", vsum);
	getchar();
	return 0;
}

使用VMProtect Ultimate v 2.13.5 加壳处理,生成VMP_UserDebugger.exe


X64DBG启动调试:

先运行跟踪抓一些代码,方便分析:


分析过程-运行时

当执行到如下所示代码处时,所需的寄存器环境已基本初始化完成完成(000-05B为寄存器初始化代码)

此时,运行环境已基本初始化完成(分析见下文),需特别关注的寄存器如下表所示: 

R12

Handler表(未赋值)

R13

Handler基址

RBP

栈顶指针

RSI

字节码缓冲区(偏移)

RDI

伪寄存器组

RBX

解密Seed



PS:

此时,栈中已压入Handler基址数据,此时栈顶指针RBP指向栈底-8位置,而不是栈底。


分析后续代码:

可以看到,已经进入'VM'的世界了,需要注意到06F073处代码,可以发现对字节码的''操作是逆序的(后文我们可以发现,对操作码和操作数的''操作,皆是逆序进行的),将这个块标记为VmInitialize


继续分析后面的Handler:

可以看到是一个POP操作,将栈中数据POP到一个伪寄存器(BYTE:[RSI-1]指示了要POP到哪个寄存器),将这个代码段标记为VmPOP8


继续:

除了缺少RSI和R12的赋值,其它基本与VmInitialize相同,另外可以注意到操作码的二者解码算法是一致的,将其标记为VmJMP



继续:

可以看到是一个PUSH操作,记为VmPUSH4 注意10F处的ja,是栈溢出错误检查,结合108处代码,可以知道RDI指向的伪寄存器组的大小为0xE0这个事实。


跳过110处的VmJMP操作(参见上文),继续:


这是一个基于栈的加法操作,将其标记为VmADD我们参考VmADD实现,可以大胆猜测VMP的二元运算栈模型,如下图:



总结

至此,简单总结一下,VMP维护了一个伪寄存器组(RDI),虚拟机栈(RBP),虚拟了PUSH, POP, JMP等指令,虚拟了基于栈的ADD等算术运算。

虚拟机运行时内存布局如下

高 地 址  伪 寄 存 器  低 地 址

二元运算模型如下:




[注意] 欢迎加入看雪团队!base上海,招聘安全工程师、逆向工程师多个坑位等你投递!

最后于 2021-7-7 09:59 被Anakin Stone编辑 ,原因:
上传的附件:
收藏
点赞4
打赏
分享
最新回复 (11)
雪    币: 1372
活跃值: 活跃值 (687)
能力值: (RANK:250 )
在线值:
发帖
回帖
粉丝
xiaohang 活跃值 3 2021-7-6 21:24
2
0

图片不可见,请编辑一下

最后于 2021-7-6 21:24 被xiaohang编辑 ,原因:
雪    币: 2999
活跃值: 活跃值 (557)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
皮皮虾啊 活跃值 2021-7-7 08:59
3
0
楼主加油,期待后续~
雪    币: 3606
活跃值: 活跃值 (2215)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
Anakin Stone 活跃值 2 2021-7-7 09:19
4
0
xiaohang 图片不可见,请编辑一下
可以了。
雪    币: 2168
活跃值: 活跃值 (674)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
木志本柯 活跃值 2021-7-7 10:16
5
0
要是能用看雪上的一个ctf加个vm写个分析贴就好了,啊哈哈哈是我贪得无厌了。
雪    币: 1372
活跃值: 活跃值 (687)
能力值: (RANK:250 )
在线值:
发帖
回帖
粉丝
xiaohang 活跃值 3 2021-7-9 10:12
6
0
期待你的后继内容
雪    币: 2502
活跃值: 活跃值 (1131)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
小阿呆 活跃值 2021-7-10 07:44
7
0
学习了,期待后续~~~~~~~~~~~~
雪    币: 3
活跃值: 活跃值 (615)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lookzo 活跃值 2021-7-10 10:37
8
0
庖丁解牛,期待
雪    币: 3606
活跃值: 活跃值 (2215)
能力值: ( LV12,RANK:250 )
在线值:
发帖
回帖
粉丝
Anakin Stone 活跃值 2 2021-7-12 09:04
9
0
xiaohang 期待你的后继内容[em_84]
雪    币: 15488
活跃值: 活跃值 (20446)
能力值: (RANK:75 )
在线值:
发帖
回帖
粉丝
Editor 活跃值 2021-7-12 09:40
10
0
感谢分享~
雪    币: 206
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
wx_Y0ng. 活跃值 2021-8-10 17:44
11
0
VMProtect Ultimate v 2.13.5可疑发一下吗
雪    币: 233
活跃值: 活跃值 (581)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
kakasasa 活跃值 2021-8-10 19:10
12
0
感谢分享~
游客
登录 | 注册 方可回帖
返回