你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:杂志经典 / 图形图象处理与游戏编程
6.2 U盘病毒及其免疫程序
 

一、U盘病毒和autorun.inf文件

目前U盘病毒的最大特征是利用autorun.inf这个自动运行文件来侵入,autorun.inf相当于一个传染途径,经过这个途径入侵的病毒,理论上可以是“任何”病毒。因此大家可以在网上发现,当搜索到autorun.inf之后,附带的病毒往往有不同的名称。

autorun.inf文件本身是一个常规且合理的文件和技术。在Windows XP以及之前的Windows 98等系统中,需要让光盘、U盘插入到机器时自动运行的话,就要靠autorun.inf。它是保存在驱动器根目录下的一个隐藏的系统文件,里面包含一些简单的命令,例如,告诉系统这个新插入的光盘或硬件盘符图标改成某个路径下的icon,指定系统自动启动什么程序等。

因此,在autorun.inf文件中,既可以放置正常的启动程序,如经常使用的各种教学光盘,使其一插入电脑就自动安装或自动演示,也可以放置任何可能的恶意内容。病毒作者或传播者就是利用了这一点,让移动设备在用户系统完全不知情的情况下,“自动”执行某个命令或恶意程序。

借助于autorun.inf文件,病毒有了启动方法,病毒作者还需要将病毒主体放进U盘里才能让其运行。如何将病毒隐藏在一般情况下看不到的地方呢?一种是假回收站方式:通常在U盘中建立一个名为“Recycler”的文件夹,然后把病毒藏在里面很深的目录中,一般人以为这就是回收站了,而事实上回收站的名称是“Recycled”。另一种是假冒杀毒软件方式:病毒在U盘中改名为“RavMonE.exe”,让人以为是瑞星杀毒软件的程序。

二、U盘病毒程序的设计与实现

1.病毒程序功能

VC6.0的环境下,编程实现一个简单的U盘病毒程序U_security2.exe。该病毒程序的主要功能是:第一次运行U_security2程序后,如果在系统路径下没有aaaaa.exe,则在系统路径下每5秒钟创建这个进程(aaaaa.exe其实是U_security2.exe的拷贝),不断地占用机器的内存。同时修改注册表,使其在系统启动时自运行。同时如果U盘里没有autorun.infbbbbb.exe,则在U盘里创建,其中bbbbb.exe也是U_security2.exe的拷贝,autorun.inf则用来激活bbbbb.exe。在Windows任务管理器的进程表里会发现并没有U_security2.exe这个进程,而是出现了名为aaaaa.exe的进程,这是因为程序中的CopyToSysAndSet(HWND hwnd)函数里使用SendMessage(hwnd,WM_CLOSE,0,0)把进程U_security2结束了

然后,当这个被感染了病毒(bbbbb.exe)U盘插入其他机器时,双击U盘会打不开,而且每双击一次U盘,就会每隔5秒钟创建一个进程aaaaa.exe不停地占用系统内存,使得系统运行速度越来越慢。只有单击“打开”选项才能打开该U盘,并且弹出U盘时系统会提示“无法停止通用卷设备”,原因在于,autorun.inf调用并启动潜伏在U盘中的bbbbb.exe进程,即相当于U盘中有进程在运行,故只有在进程表中找到相应进程并删除以后,才可以弹出U盘。

2.病毒程序建立步骤

运行VC++后,选择“文件”→“新建”菜单命令,打开应用程序向导,显示出“新建”对话框。单击“工程”标签,从列表中选中Win32 Application项。

在工程名称框中输入Win32应用程序项目名称U_security2并选择合适的文件夹。

单击“确定”按钮继续,选中An empty project项,单击“完成”→“确定”。

再次选择“文件”→“新建”菜单命令,单击“文件”标签,选择C++ Source File项,输入文件名U_main,单击“确定”按钮,在其中编写相应的代码。

3.病毒程序分析

该程序主要由头文件、预定义、函数及变量定义、函数实现代码组成,部分代码如下:

……

#pragma comment(lib,"shlwapi.lib")  //连入库文件

#define TIMER 1//计时器

//以下是函数的定义及声明:

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);//窗口过程

TCHAR FirstDriveFromMask (ULONG unitmask); //获取盘符

//病毒从U盘启动时用到的函数

BOOL FileExist(TCHAR *path);//测试一个文件是否存在

BOOL GetSelfPath(TCHAR *path);//得到病毒路径

BOOL GetSysPath(TCHAR *path);//得到系统路径

BOOL CopyToSysAndSet(HWND hwnd);//把程序路径复制到系统目录并设置文件属性

BOOL SetFileAttrib(TCHAR *path);//设置path所指文件的属性

BOOL RegAutoRun(TCHAR *path);//修改注册表,使系统启动时自动运行aaaaa.exe

//C盘启动时用到的函数

BOOL CopyToUAndSet();//复制Autorun.infbbbbb.exeU盘并设置文件属性

BOOL CreateAutoRunFile(TCHAR *path);//U盘下生成autorun.inf文件

BOOL FindSelf();//测试aaaaa.exe是否已经在执行了

//全局变量和常量的定义及声明

TCHAR szExePath[MAX_PATH];

TCHAR szSysPath[MAX_PATH];

TCHAR U[2];

const TCHAR *szExeName="bbbbb.exe";

const TCHAR *szSysName="aaaaa.exe";

const TCHAR *szAutoRunFile="autorun.inf";

其中,全局变量szExePath[MAX_PATH]用于保存病毒路径;szSysPath[MAX_PATH]用于保存系统路径;U[2]用于保存U盘的盘符。常量szExeName代表在U盘创建的进程的名称;szSysName代表在系统下创建的进程的名称,可在进程表中看到;szAutoRunFile代表在U盘下创建的病毒的名称:autorun.inf

在窗口过程WndProc中由SetTimer(hwnd,TIMER,5000,0)函数调用时钟映射WM_TIMER,在它里面定义了CopyToSysAndSet(HWND hwnd),创建一个aaaaa.exe进程。在SetTimer()函数里有一个参数值为5000,意为5000ms,即每隔5s调用一次WM_TIMER。故可以每隔5秒创建一个aaaaa.exe进程。各函数之间的关系图1所示。

 

 


 


1  各函数之间的关系

这是一个Windows应用程序,首先得在WinMain里创建窗口,但是本程序不需要显示窗口,所以在程序中对窗口属性作了些设置,没有让窗口显示出来。属性设置如下:

hwnd = CreateWindow (szAppName, "UAutoRun病毒示例",

 WS_DISABLED,       //窗口样式

 0,0,               //窗口最初的x位置、y位置

 0,0,               //窗口最初的x大小、y大小

 NULL, NULL, hInstance, NULL);

hwnd是窗口句柄,窗口样式设置为WS_DISABLED,不可见。

窗口过程WndProc包括四个消息映射:WM_CREATE(窗口创建产生的消息)WM_TIMER(时钟映射,在WM_CREATE里已经定义了SetTimer来启动它)主要对C盘进行操作,在C盘每隔5秒钟就会创建一个进程aaaaa.exe,直至点击“确定”退出;WM_DEVICECHANGE(检测U盘插入拔出的消息映射)主要对U盘进行操作,首先读U盘盘符,然后在U盘创建autorun.infbbbbb.exe进程;WM_DESTROY(窗口关闭产生的消息)

aaaaa.exe进程、autorun.infbbbbb.exe进程的作用及关系。其实aaaaa.exebbbbb.exe都是U_security2.exe的拷贝,它们只是文件名不一样而已。autorun.infbbbbb.exe是写在U盘里的,autorun.inf是病毒的发起者,通过调用bbbbb.exe实现病毒入侵,aaaaa.exe进程是病毒入侵的表现,它会不停地占用主机器的内存。

程序通过CreateAutoRunFile(TCHAR *path)函数在U盘建立一个autorun.inf文件,内容为:

[AutoRun]

open=szExeName

shellexecute=szExeName

shell\\Auto\\command=szExeName

shell=Auto

其中szExeName的值为"bbbbb.exe"

当已经被同时写入autorun.infbbbbb.exe这两个文件的U盘插入一台没有防御的电脑时,若双击U盘打开,那么就中毒了。这时autorun.inf调用了bbbbb.exe,把aaaaa.exe写入系统路径下,同时修改注册表,让系统在启动时能自动调用aaaaa.exe,达到了病毒传播的目的,整个过程如图2所示。

 

 


 

2 双击U盘后病毒的传播

4.程序运行结果

为了清楚地知道程序都做了些什么事情,笔者在程序的某些关键地方加了消息对话框。编译运行后,程序出现如下界面:

1)每隔5秒钟,在C盘创建进程aaaaa.exe,如图3所示。

    


           

 3 创建进程

2)插入U盘后,获取U盘盘符。                            

3)现在查看一下Windows任务管理器进程,将会发现多了aaaaa.exe进程(如图4所示),它的个数等同于在第(1)步里看到的图3的个数。


4 查看进程

4)打开U盘,发现在U盘里已创建了autorun.infbbbbb.exe隐藏文件,如图5所示。


5 创建的文件

5)接下来,将这个感染了病毒的U盘插入其他电脑,会发现双击U盘打不开,然后同样会每隔5秒钟创建一个进程,如图6所示。


6 双击U盘之后的效果

三、U盘免疫程序

1.免疫程序功能

若在U盘中创建一个名为autorun.inf的空文件夹而不是autorun.inf文件,则U盘就可以对autorun.inf病毒进行免疫。可在VC 6.0下实现了这一功能。

2.免疫程序分析

程序部分代码如下:

#include <windows.h>

#include "Shlwapi.h"

#include <Dbt.h>

#pragma comment(lib,"shlwapi.lib")  //连入库文件

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);//窗口过程

TCHAR FirstDriveFromMask (ULONG unitmask); //获取U盘盘符

BOOL CopyToUAndSet();//利用CreateDirectory函数建立名为autorun.inf的空文件夹

BOOL SetFileAttrib(TCHAR *path);//设置path所指文件的属性

TCHAR U[2]; //全局变量U[2]用于保存U盘的盘符

const TCHAR *szAutoRunFile="autorun.inf"; //szAutoRunFile代表用于病毒免疫的文件夹名。

各函数之间的关系如图7所示。

WndProc(这是窗口过程,程序主要从这里执行)

FirstDriveFromMask (ULONG unitmask);//获取U盘盘符

CopyToUAndSet(); //U盘建立名为autorun.inf的空文件夹

SetFileAttrib(TCHAR *path);//设置path所指文件的属性

OnDeviceChange();//检测U盘插入拔出的消息映射

 


 

7 函数之间的关系图

首先在WinMain里创建窗口,本程序不需要显示窗口,所以在程序中同样对窗口属性作了些设置,没有让窗口显示出来。

窗口过程WndProc包括三个消息映射:WM_CREATE(窗口创建产生的消息)WM_DEVICECHANGE(检测U盘插入拔出的消息映射)主要对U盘进行操作,插入U盘后读取U盘盘符,然后在U盘创建autorun.inf空文件夹,实现对autorun.inf病毒的免疫;WM_DESTROY(窗口关闭产生的消息)

3.程序运行结果

编译运行后,插入U盘,获取U盘盘符,如图8所示。

   


      

8               

程序执行完接着会显示“U盘免疫成功”或者“此盘已进行了免疫”(U盘里已存在名为autorun.inf的文件夹),如图9和图10所示。

 

 

           图9          10

 

打开U盘,可看到已存在名为autorun.inf的文件夹,如图11所示。


11

四、U盘免疫功能的验证

下面对U盘免疫程序的功能进行验证。

1.当U盘没有免疫时

运行U_security2这个病毒程序,会发现U盘里出现了autorun.inf自动运行文件及名为bbbbb的进程、U盘的初始状态(如图12所示)和运行了程序U_security2之后屏幕显示(如图13所示)。



 

 

12                                  13

用“U盘病毒防护盒”软件可检测到病毒存在(如图14所示),该软件可以将其删除(如图15所示)。可以看出,bbbbb.exeautorun.inf病毒自动运行的路径。

14                                     15

 

2U盘进行了免疫

此时再运行病毒程序的话,情况就不一样了:autorun.inf根本写不进U盘。这时运行病毒程序后再用U盘病毒防护盒检测后发现,这时虽然有bbbbb.exe存在,但由于没有激活autorun.inf文件,因此不会对计算机造成威胁(如图16所示)。


16 

五、结语

通过本实例,分析了U盘病毒程序以及免疫程序的工作原理。平时在使用U盘的时候,除了进行U盘病毒的免疫外,如何更好地进行安全防护,我们可以从以下几点来考虑:

修改计算机系统中的注册表,将系统各个磁盘的自动运行功能禁止。也可使用Windows组策略功能,方法是在“开始”菜单的“运行”框中运行“gpedit.msc”命令,在“组策略”找到“计算机配置”和“用户配置”下的“管理模板”功能,打开其中的“系统”菜单中的“关闭自动播放”的设置,在其属性里面选择“已启用”,接着选择“所有驱动器”,最后确定保存即可。尽量不要使用双击打开U盘,而是选择右键打开。注意使用系统中防病毒软件的“实时监控”功能,避免病毒文件入侵感染。打开“文件夹”选项中“隐藏受保护的操作系统文件”选项,并选择“显示所有文件和文件夹”选项,以便U盘被感染后能及时发现病毒。

  推荐精品文章

·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录
·2023年10月目录
·2023年9月目录 
·2023年8月目录 

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089