第9课教程,主要讲的是特殊DLL,文件关联以及挂钩启动的知识内容。
文件关联
三.文件关联
一种类型的文件与一个可以打开它的程序建立起一种依存关系,当双击该类型的文件时,系统会自动用已关联的程序来打开它.例如,默认情况下,.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下去修改.
如果你要把记事本关联到所有文件,方法也是一样的,如果要关联某几种文件类型,就到特定的文件类型下修改即可.其他的东西大家可以自己探索下,比如修改某类文件的图标,不显示某类文件的扩展名等.
网友评论