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