反病毒教程第9课:文件应用与挂钩启动

互联网 | 编辑: 黄蔚 2009-07-26 00:00:00转载 返回原文

第9课教程,主要讲的是特殊DLL,文件关联以及挂钩启动的知识内容。

特殊dll文件ws2_32.dll

点击此处访问 反病毒教程第1课

(注:本文中的“\”,如有需要体验或者使用,请替换成半角斜线)

一.一个特殊dll文件ws2_32.dll

在软件安装目录下新建一个文本文件,改名为ws2_32.dll,此时将导致该软件无法运行.

解释如下:ws2_32.dll是Windows Sockets应用程序接口,用于支持Internet和网络应用程序.程序运行时会自动调用ws2_32.dll文件,ws2_32.dll是个动态链接库文件位于系统文件夹中.Windows在查找动态链接库文件时会先在应用程序当前目录搜索,如果没有找到会搜索Windows所在目录;如果还是没有会搜索system32和system目录。一些病毒可能会利用此原理在杀毒软件目录中建立名为ws2_32.dll文件或文件夹,在杀毒软件看来这是程序运行需要的文件而调用,而这个文件又不具备系统ws2_32.dll文件的功能,所以杀毒软件等就无法运行了而提示:应用程序或DLL为无效的 windows映像,请再检测一遍您的安装盘,我随便测了一个程序。

我现在拿一个程序做个试验…

找到一个程序,如我的ACD See,增加一个ws2_32.dll文件…

如:

删除ws2_32.dll就可以正常运行~~

二.一个特殊的程序rundll32.exe

这个文件的作用,从文件名应该就可以猜到了,用于运行32位的DLL文件,位于%systemroot%\system32\rundll32.exe

下面来看看这个命令的格式:

Rundll32.exe DLL文件名,DLL文件中的引出函数 引出函数的具体参数

这里说的DLL文件名其实也可以是exe文件名,引出函数的具体参数是可选的.

大家打开开始,运行对话框,复制下面一行的命令粘贴进去,然后点确定.先不说效果,自己操作下哈.

rundll32.exe C:\WINDOWS\system32\shimgvw.dll,ImageView_Fullscreen C:\WINDOWS\Web\Wallpaper\Bliss.bmp

是不是被这么长的命令吓怕了,其实很简单,看看上面的格式,都能对上号吧

rundll32.exe这是命令名,可以不写扩展名.

C:\WINDOWS\system32\shimgvw.dll这个就是DLL文件名

ImageView_Fullscreen这个是前面这个DLL文件的引出函数,功能是最大化显示图片,注意它和前面的DLL文件名是用逗号分隔的.

C:\WINDOWS\Web\Wallpaper\Bliss.bmp引出函数的具体参数,这里就是所要打开的图片文件路径.

rundll32这个命令是相当复杂的,不要求大家记住所有DLL文件的引出函数(也不可能记住),但要知道它的格式.

来看个短一点的命令吧

rundll32.exe shell32.dll,Control_RunDLL desk.cpl

打开了桌面属性对话框.

说了这么多,好像和病毒没有关系?呵呵,关系很大,病毒可以通过这个命令来运行,配合注册表中的几个自启动位置...是不是很强大了,举个例子:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run

键main,值rundll32.exe C:\progra~1\intern~1\use6.dll mymain

这里的C:\progra~1\intern~1\use6.dll就是病毒文件,很好地实现了开机自动运行,并且还看不到病毒的进程,因为它只是一个 DLL文件,但可以看到rundll32.exe进程,这个进程应当结束.打开控制面板中的一些项目时,也会出现这个进程,此时是正常的(刚刚打开桌面属性对话框时也会有这个进程啊).

文件关联

三.文件关联

一种类型的文件与一个可以打开它的程序建立起一种依存关系,当双击该类型的文件时,系统会自动用已关联的程序来打开它.例如,默认情况下,.txt文件是用记事本来打开的,.jpg文件是用windows图片和传真查看器来打开的.当某种类型的文件未与任何程序关联时,双击它系统会弹出打开方式对话框.

修改文件关联的方法很多,这里大致介绍几种常用的.我以.jpg文件用记事本来打开为例.

1. 点击任意一张jpg图片属性,单击更改,出现打开方式对话框,选择记事本(也可以点击浏览找到%systemroot%\notepad.exe),确定即可.现在双击一下图片看看,出现的是记事本,但是显示乱码.现在改回来吧,只能通过选择windows图片和传真查看器改回来,无法通过浏览来改,其实也是可以的,浏览时,下面选择所有文件就行了,因为windows图片查看器并不是一个可执行文件而是一个动态链接库,文件位置是%systemroot%\system32\shimgvw.dll,当然dll文件是不能直接执行的,事实上它是由rundll32.exe来启动的,刚刚运行过那个很长的命令的话应该不会有太大的疑惑.

2.点击工具,文件夹选项,文件类型,找到JPG,单击更改,出现打开方式对话框,和刚才一样操作就行了,简单.点击下面的高级,出现编辑文件类型对话框,双击open(或者选中后点右边的编辑)

看下用于执行操作的应用程序.

值为rundll32.exe C:\WINDOWS\system32\shimgvw.dll,ImageView_Fullscreen %1

和上面运行的那个命令很类似吧,区别只在于最后面是%1,而不是一个文件名.%1表示将选中的图片文件名作为参数传递给windows图片查看器,也就是说双击的时候,%1将被当前的文件名替换(在批处理中,%1代表命令行的第一个参数,).嘿嘿,你可以把%1换成某具体图片的路径试试,很爽吧,无论双击哪个图片,打开的都是同一个图片.(玩得差不多了记得改回来哦)

3.注册表(regedit),展开 HKEY_CLASSES_ROOT\jpegfile\shell\open\command,是不是在右边看到了和刚才的那一串"rundll32.exe C:\WINDOWS\system32\shimgvw.dll,ImageView_Fullscreen %1"一模一样,这就是jpg文件的打开方式,看一下这个注册表路径吧

HKEY_CLASSES_ROOT\jpegfile\shell\open\command

HKEY_CLASSES_ROOT不多说,这下面的都是一些OLE信息,包括文件扩展名,文件类型,文件图标,关联的打开方式,以及分类标识(CLSID).

jpegfile某种文件类型,这里是jpg图片文件.

shell一般是固定的

open选中该类文件右键第一项所出现的文字(该项是黑体的),默认显示为打开,这里是预览.可以是其他名字,但这样将不保证它一定会出现在右键第一项,特别是有多种程序关联时.我做个示范,把open重命名为open1.

重命名前:

重命名后:

可能你的右键菜单没这么多选项,这里真正只与jpg文件关联的只有用ImageReady编辑,用Photoshop编辑,预览,打印这四个,对应注册表如图:

如何将预览放到右键第一个选项而又不以open为名,很简单,只要让它在注册表的位置排到另两个前面就可以了,注册表中的项是按字母顺序排列的,所以只要我的名字能比EdtIR8更靠前就行,比如以A开头的...

command当前一项是open时,它表示双击或右键选择第一项时所要执行的命令,只要有command的上一项,右键菜单都会出现一个选项而command表示选择这一项时所要执行的命令.

如果要将jpg用记事本打开,只要将rundll32.exe C:\WINDOWS\system32\shimgvw.dll,ImageView_Fullscreen %1修改为notepad.exe %1即可,更好的写法应该是notepad.exe "%1",加上引号的目录是即使要打开的文件路径中包含空格,也可以打开.因为默认情况下,命令行的各参数间是以空格分隔的,如果文件路径中出现空格,空格前将不再认为是第一个参数,从而导致系统找不到指定文件等.但这里由于notepad的特殊性,不会出错的.

有兴趣的可以看看txt,exe,com,bat,vbs等文件的关联,如果病毒要修改文件关联,这几个是优先选择的.

其中exe的关联是比较特殊的,它的值为"%1" %*

这里的"%1"可以和上面一样理解,%*是指其他所有参数,这也是exe文件可以带参数运行的原因.

试试把它的值改成%1 %*,即去掉%1上的引号,很多程序仍然可以正常打开,有些却不行,原因是该exe文件路径中有空格,打开目录运行C:\Program Files\WinRAR\WinRAR.exe,结果如图:

病毒一般会直接把这个值改成病毒文件的路径,不带参数.此时当你双击exe文件时,运行的将是病毒,这种改法是最常见的.另一种改法是不直接修改exefile下面的项,而是这样修改:

新建一个项,名字任意,比如我取名为anti4,继续新建shell,command等项,将值改为病毒文件的路径.

然后,将HKEY_CLASSES_ROOT\.exe右边名称为默认的项的值改为anti4.

当你双击一个文件时,系统所做的工作是这样的:先判断文件的后缀,比如我双击的是一个exe文件,则系统会在HKEY_CLASSES_ROOT下面找名为.exe的项,读取它的值,比如它的值为anti4,那么系统再找名为anti4的项,再读取它下面shell\command的值,然后根据这里的命令打开.

刚刚是不是在我的右键菜单中看到了有个复制文件路径的命令,它是关联所有文件的,目的是为了自己使用方便,方法是这样的:

在 HKEY_CLASSES_ROOT\*\shell下新建一个项,名称任意,直接取名为"复制文件路径"好了,在它下面新建一名为command的项, 将它右边的值改成符合要求的命令,这个命令其实是一个程序文件,该程序的功能是读取命令行的第一个参数,并将该参数复制到系统剪贴板并退出,有能力的自己写一下这个程序,或者下载附件中的解压到某个路径下,command的值就改为这个程序的路径,后面加个半角空格,再加%1即可,比如d:\soft \system\copy.exe %1

这样只是关联了所有类型的文件,如果要关联文件夹,方法和上面一样的:

[HKEY_CLASSES_ROOT\Directory\shell\复制文件夹路径\command]默认=d:\soft\system\copy.exe %1

然后就是一些细节问题了,比如去掉第一个字下面的下划线,加个快捷键等.

[HKEY_CLASSES_RO/T\Directory\shell\复制文件夹路径]默认=复制文件夹路径(&C)

关联文件也可以到HKEY_CLASSES_ROOT\Folder\shell下去修改.

如果你要把记事本关联到所有文件,方法也是一样的,如果要关联某几种文件类型,就到特定的文件类型下修改即可.其他的东西大家可以自己探索下,比如修改某类文件的图标,不显示某类文件的扩展名等.

系统特殊文件夹

四.系统特殊文件夹

在我们的桌面上或其他地方有一些文件夹并不是真正的文件夹,而是一个OLE对象(组件类),比如我的电脑,控制面板等.系统使用一个叫做class id(CLSID)的一串16进制数字来标识它们(称为分类标识),注册表路径:HKEY_CLASSES_ROOT\CLSID

CLSID像居民身份证一样,是一个组件类的唯一标识.对于每个组件类,系统都分配一个唯一表示它的ID(IDentity),这个ID是根据当时的时间,机器地址等信息动态产生的,命名规则为{8-4-4-4-12},这里的数字表示16进制数的个数.

class id中的class在这里解释为对象,至于什么是对象,请看前面的课程.

比如我的文档的CLSID为450D8FBA-AD25-11D0-98A8-0800361B1103,使用时必须将CLSID用大括号括起来.

如果要修改某个的图标,只要修改HKEY_CLASSES_ROOT\CLSID\{xxxxx}\DefaultIcon的图标文件的路径.

大家先找到我的文档的CLSID,不要直接去找哈,用查找功能,不然会眼花的的.也不要试图去记住这串字符,我保证你是记不住的.我的文档图标的默认值为%SystemRoot%\system32\SHELL32.dll,-235.

InProcServer32这个项下的也是很重要的,它包含了线程模型(ThreadingModel),当你打开这个对象时,这里默认值处的DLL就会被加载,于是又给了病毒可乘之机.

附常用的CLSID:

我的文档:450D8FBA-AD25-11D0-98A8-0800361B1103

我的电脑:20D04FE0-3AEA-1069-A2D8-08002B30309D

网上邻居:208D2C60-3AEA-1069-A2D7-08002B30309D

回收站:645FF040-5081-101B-9F08-00AA002F954E

Internet Explorer:871C5380-42A0-1069-A2EA-08002B30309D

控制面板:21EC2020-3AEA-1069-A2DD-08002B30309D

勾子挂接启动

五.勾子挂接启动

注册表位置:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellExecuteHooks

很多软件都会利用这个位置,病毒,安全软件等当然也会用.以达到随系统启动的目的,键名是一个CLSID,值为空.根据这个CLSID到 HKEY_CLASSES_ROOT\CLSID下去查找,找到后展开InPrOcservEr32,右边就可以看到对应的DLL文件了.如果是病毒文件,则要删除这两个地方的信息.举例如下:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellExecuteHooks]

键名{288BD9BD-F0DC-46B1-81B5-2B61DF8077CE}值为空

[HKEY_CLASSES_ROOT\CLSID\{288BD9BD-F0DC-46B1-81B5-2B61DF8077CE}\InPrOcservEr32]

默认值为abc.dll

清理时需要删除上面的键名以及整个HKEY_CLASSES_ROOT\CLSID\{288BD9BD-F0DC-46B1-81B5-2B61DF8077CE}项,有时候不是删除,而是修改,主要看这个CLSID是本来就有的还是病毒创建的.

点击此处访问 反病毒教程第1课

(注:本文中的“\”,如有需要体验或者使用,请替换成半角斜线)

返回原文

本文导航

相关阅读

每日精选

点击查看更多

首页 手机 数码相机 笔记本 游戏 DIY硬件 硬件外设 办公中心 数字家电 平板电脑