反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
比如这样:

此后在虚拟机里面,至少这个“后门”就无法被程序检查出来。
浙公网安备 33010602011771号