最近学校电脑有很多老师喜欢使用U盘拷贝文件,但是我发现,许多老师的U盘都被感染上了病毒。这种病毒很常见,感染力极强,而且甚至像360系软件等等根本无法查杀。那么,这种病毒如何查杀呢?
1.病毒介绍
文件夹EXE病毒,学名Worm.Win32.AutoRun.soq。这种病毒只会运行在win32系统上。当你把你的U盘插入到一台电脑后,突然发现U盘内生成了以文件夹名字命名的文件,扩展名为exe,并且它们的图标跟windows默认的文件夹图标是一样的,很具有迷惑性。当你双击这个被伪装的exe文件后,木马自动启动并在电脑内下毒。
2.运作原理
简而言之,这个病毒就是将你原有的文件夹隐藏起来,然后制造一个exe文件伪装成你的文件夹,其实这个exe就是病毒。在“组织”中,勾选“显示被隐藏的文件和文件夹”,并且取消勾选“隐藏被保护的文件夹”即可看到你的文件夹。
完整病毒机理:
病毒运行后会释放以下文件:
1 | com.run |
这些文件会被复制到系统盘的C:\WINDOWS\system32里面
随后,新增以下注册表项,以达到病毒随系统启动而自启动的目的。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
注册表值:XP-290F2C69(后8位随机)
类型:REG_SZ
值:C:\WINDOWS\system32\XP-290F2C69.EXE(后8位随机)
添加以下启动项,实现病毒自启动:“C:\Documents and Settings\Administrator\「开始」菜单\程序\启动” 里的“ .lnk”
指向病毒文件。
下载病毒文件: (16,896 字节)保存为以下文件,并且运行它们:%Windir%\System32\winvcreg.exe
%Windir%\System32\2080.EXE (名称随机)
然后,被感染的电脑接入移动磁盘后,病毒会遍历移动磁盘根目录下的文件夹,衍生自身到移动磁盘根目录下,更名为检测到的文件夹名称,修改原文件夹属性为隐藏,使用户在其他计算机使用移动磁盘打开其文件夹时运行病毒, 以达到病毒随移动磁盘传播的目的。
3.解决办法:
1.杀毒软件
360并不能查清此病毒,建议使用毒霸或者电脑管家查杀。注意,该方法只能清除病毒,但不能显示被隐藏的文件夹。
2.手工清除
1、结束病毒进程。打开任务管理器,选择进程,结束进程XP-290F2C69.EXE(后8位随机),winvcreg.exe,2080.exe(随机名)。
2、删除病毒在System32生成的以下文件:
com.run dp1.fne eAPI.fne internet.fne krnln.fnr og.dll og.edt RegEx.fnr fne spec.fne ul.dll XP-290F2C69.EXE winvcreg.exe 2080.EXE(随机名)
3、删除病毒的启动项,删除以下启动项:
“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run”里的XP-290F2C69.EXE(后8位随机)
“C:\Documents and Settings\Administrator\「开始」菜单\程序\启动” 里的“ .lnk”
4、清除你的点击“开始”—输入“cmd” ,进入命令提示符,然后进入你U盘所在的根目录,具体操作如下,比如你的U盘盘符位G(即你的U盘在G盘),那么依次运行如下命令(第一行的“G:”为你的U盘盘符):
注意:第二句话会删除根目录下包括非病毒在内的所有exe文件,谨慎使用,可以仅使用1、3句话然后手动删除exe文件夹
1 | cd /d G: |
这一步也可以用C++来代替:(不会清除其他文件)
首先删除你跟目录下所有exe文件夹,随后使用此代码:
#include <iostream>
#include <cstring>
#include <windows.h>
void listFiles(const char * dir);
int main()
{
using namespace std;
char dir[100];
cout << "Enter a directory (ends with \'\\\'): ";
cin.getline(dir, 100);
strcat(dir, "*.*");
listFiles(dir);
return 0;
}
void listFiles(const char * dir)
{
using namespace std;
HANDLE hFind;
WIN32_FIND_DATA findData;
LARGE_INTEGER size;
hFind = FindFirstFile(dir, &findData);
if (hFind == INVALID_HANDLE_VALUE)
{
cout << "Failed to find first file!\n";
return;
}
do
{
if (strcmp(findData.cFileName, ".") == 0 || strcmp(findData.cFileName, "..") == 0)
continue;
if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
cout << findData.cFileName << "\t<dir>\n";
string str="attrib \"";
str.append(findData.cFileName);
str.append("\" -s -h");
system(str.c_str());
}
else
{
size.LowPart = findData.nFileSizeLow;
size.HighPart = findData.nFileSizeHigh;
cout << findData.cFileName << "\t" << size.QuadPart << " bytes\n";
}
} while (FindNextFile(hFind, &findData));
cout << "Done!\n";
system("Pause");
}
输入你U盘所在盘符(例如 G:\) (\要反斜杠)即可