-
-
[旧帖]
[原创]申请个邀请码 木马源码免杀:过启发式杀毒之虚拟机检测方法
0.00雪花
-
发表于:
2011-7-31 09:49
2195
-
[旧帖] [原创]申请个邀请码 木马源码免杀:过启发式杀毒之虚拟机检测方法
0.00雪花
近些年,启发式作为一项新的查毒技术产生,这让我们辛辛苦苦编写的木马运行时瞬间被杀,思量着有守就得有攻,我决定写一篇检测虚拟机过启发式的文章。 检测虚拟机,关键是利用虚拟机与真实环境不同的东西进行判断,我将逐个介绍不同的检测方法。方法一:进程id比较法。大家知道,一个进程有父id和自己的id,这用任务管理器可以看到。一般情况下,这两个值是不一样的,但虚拟机可不是。虚拟机中一个进程的两个值是一样的。1. 先获取自己的进程ID,GetCurrentProcessID()
2. 获取进程查询句柄,调用OpenProcess()带上PROCESS_QUERY_INFORMATION标志
3. 调用 NtQueryInformationProcess()来查询进程信息,用此函数获得父进程id方法网上都是,我不多说了。 方法二:时间差检测法。杀软为了不让虚拟机占用过多cpu资源,分配给虚拟机的cpu频率一般很低,因此,检测一个指令在虚拟机运行的时间,与真实环境运行的时间相比较,就行了。用rdtsc指令可用来测定 时间,具体用法是将被测语句放于两个此指令之间。如不明白可百度一下。你需要先测定真实环境的时间,再测定虚拟机的时间,多测定几组,进行比较,找出合适的值,用来判断。 方法三,注册表关键词法。一些虚拟机在创建虚拟网卡等虚拟硬件时,会在注册表留下关键词,比如vmware等。这些包含关键词的注册表项需要你针对不同虚拟机自己去找。网上流传的也不少 方法四,idt基址检测法。此方法屡试不爽,甚为通用,可谓上上之策。这里直接说检测方法,redpill通过判断sidt指令获得的idt基址第一字节是否为0×d0来检测。redpill代码网上都有,不再说了 检测虚拟机的方法很多,主要是找到其与真实环境的不同之处。要真正运用上文检测方法,你需要精通系统编程,这也是我不贴完整代码的原因。在实现过程中,你需要亲手对其进行研究,测试,并从中提高水平。一味地摘抄别人的代码,只会加大中国黑客的傻瓜化。希望论坛里的新手逐渐变成老手,希望越来越多的人能自己实现上述方法,也希望看雪越办越好。 最后,恳求版主给个邀请码。
[注意]看雪招聘,专注安全领域的专业人才平台!