反VM虚拟机代码学习

在分析代码中遇到的反虚拟机代码,网上查了下资料顺便原帖在此:

http://vrt-blog.snort.org/2009/10/how-does-malware-know-difference.html

 

这里主要是反VM的代码,VMare里面按照帖子内容有个后门或者说彩蛋的东西,可以向I/O口发送特定的指令:

mov EAX, 564D5868h ; VMXh
xor EBX, EBX  ; set EBX to anything but 0x564D5868 (in this case 0)
mov CX, 0Ah   ; Backdoor command. 10: Get VMware version
mov DX, 5658h  ; VX
in EAX, DX  ; Read from port VX into EAX
cmp EBX, 564D5868h ; EBX should have the magic number VX is VMware is present. If not, EBX=0

如果说非虚拟机环境,运行到IN这种特权指令就会发生崩溃然后发生异常,所以这一段也必须用于SEH中。另外,EAX,CX,DX的值是固定的,修改其中部分会导致IN结果失效。

这里的0x564D5801是ebx在虚拟机里面运行到in后的值,据说这是个查版本的指令,只是也没看出来怎么看这个版本。不过就检查虚拟机内运行的份上是靠谱的

 

2013-11-7补充:

当然虚拟机也不是毫无办法,比如说可以在VM的配置文件VMX中加入:

monitor_control.restrict_backdoor = TRUE

比如这样:

此后在虚拟机里面,至少这个“后门”就无法被程序检查出来。

posted on 2013-11-06 00:07  堕落华为人  阅读(872)  评论(0)    收藏  举报

导航