首页
社区
课程
招聘
[旧帖] [原创]虚拟机保护初探 0.00雪花
发表于: 2010-11-22 21:21 1480

[旧帖] [原创]虚拟机保护初探 0.00雪花

2010-11-22 21:21
1480
由于在实验室里面一直在做虚拟机保护的工作。实现了一个原型系统,能跑起来了,不过还是有些简陋。最近一直在看VMProtect的一些帖子,感觉最近收获挺大。简单来说,虚拟机保护就是将x86指令或者opcode转变为只有自定义的VM才能准确识别并执行的指令,然后通过虚拟机自带的解释器来解释执行。不过VMProtect和Themda好像都是刚开始执行时就进入虚拟机保护的壳之中,壳负责开辟VM要用到的堆栈空间。在壳中有一个DISPATCH(指令分派器)负责读取bytecode并识别,判断出虚拟机保护的伪指令应该实现什么功能,然后通过一段代码,实现这个功能。这段代码的操作空间只是在VM自己申请的栈之中,对这个栈的操作不会影响到原始程序的其他部分。在实现一条伪指令的全部指令执行完毕后,通过pop 指令将指令的执行结果出栈。然后返回到DISPATCH函数,读取下一个bytecode,如果是伪指令,则继续用VM解释执行,如果是原始的x86指令,则系统自己执行。
   关于VMProtect有几个小问题。关于虚拟化以后的指令的存放位置,我们的原型系统实现的是放在PE文件各个节的冗余的空间之中,但是VMProtect好像将这些指令存放的位置不定。还有,它解释执行各个指令的函数,或者说是伪指令集的存放位置,是在程序的内部还是在VMProtect的壳之中。这都是这两天没有想通的一些问题,大家一块来讨论讨论。

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

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 2134
活跃值: (14)
能力值: (RANK:170 )
在线值:
发帖
回帖
粉丝
2
http://bbs.pediy.com/showthread.php?t=101118

这个帖子里面应该有你需要的内容。多发贴,多学习
虚拟化以后的指令和伪指令集的存放位置一般通用方法是放到自己添加的节里面。
2010-11-22 22:15
0
雪    币: 51
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
VMP存放是一段一段的,并不是连续的,位置来说,大多数情况下,是存在自己的段中,事实上它也可以存在于程序内部,因为加壳后可以有重组exe的过程,根本不需要在冗余空间中存放。
2010-11-22 22:17
0
游客
登录 | 注册 方可回帖
返回
//