欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[WM系统开发]两种虚拟机检测技术(祝大家元旦快乐!)

[WM系统开发]两种虚拟机检测技术(祝大家元旦快乐!)

在桌面平台攻防中虚拟机是一项重要技术。对于桌面平台的恶意代码如果具备比较强的虚拟机检测能力可以大大提高战场生存能力。当恶意代码发现自己是在虚拟机中执行
就可以改变自己的行为方式,比如不进行解密操作,或者简单运行后退出从而规避虚拟机分析。对于手机平台的病毒随着时间的推移、硬件能力的提高,反病毒阵营必然也会引入
虚拟机技术来检测我们。那么研究识别虚拟机的技术就显得很有价值了。

最近一年的学习研究中我一直在关注这个问题并不断积累,总结了一些虚拟机检测的技术和经验。我总结的基本原则是:
虚拟机永远也不可能做到和真机完全相同;越偏向底层,差距越大。
目前主要的虚拟机平台就是微软提供的模拟器,现在我们的研究重点就是检测病毒是在真机上还是在模拟器上运行。
我们在研究API时发现了两个可以用于检测。
方法1:利用SetEndOfFile()函数的特点来检测。
       SetEndOfFile()函数的功能是把文件指针的当前位置设置为文件的结尾,调用后返回BOOL类型数据表示设置是否成功。我们发现这个函数在一般操作中都没有问题,
       但是在模拟器中当这个文件处于SD卡中时,设置文件末尾会出错。似乎模拟器将模拟的SD卡当作一个网络设备而禁止了这个操作。但是在真机上就没有这个问题。
       DetectVM01正是利用这个原理检测当前系统是否为虚拟机。

方法2:利用SystemParametersInfo()函数获取OEM名称字符串。
       在微软提供的模拟器中OEM字符串为"MicroSoft DeviceEmulator"。但真机不可能为这个字符串,所以获取当前系统的OEM字符串然后检测其中是否含有Emulator字样。
       如果含有则是模拟器,没有则是真机。DetectVM02就是用这个原理来检测的。

两个程序都在真机和模拟器上做了实验显示的结果不同,可以检测出来。
真机使用Touch Daul。
OEM字符串显示的是:NIKI100。
SD卡下路径为:\存储卡\VM

上传的附件 DetectVM.rar

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功