文件无疑是计算机的根本,数据的最终形式,其重要性不言可喻。
1 、 文件基本知识
首先,我们要明确两个概念“文件格式”、“文件系统格式”与一个机制“文件读写机制”,在此基础上再谈论文件的隐藏与查找、保护与删除。
A 、 文件格式
一个文件名字的组成一般都是由文件名与扩展名组成的,比如:“exe”:“Execute”,意思是“执行”,即可以执行的文件。“.bmp”代表的是一个图片格式,英文缩写“Bitmap”(位图)。扩展名代表了一个文件的格式,但更改扩展名并不会使文件格式发生改变。一个文件是否可以通过鼠标双击来执行,与其扩展名并没有必然联系。有联系的是该文件的文件格式与在系统中注册的打开此格式文件所使用的程序,缺一不可。如果将 exe 文件的文件关联改成图片浏览器,那么它也就无法双击执行了。而木马习惯于将自己改成pif 或 scr 是因为系统中默认的打开这两种格式文件的程序就是 Explorer.exe,与 exe 文件是一样的。如果指定了用某一程序来打开或加载某一文件,只要文件格式正确就可以正确打开或加载,与扩展名无关。这就是为什么有些进程中的模块看起来并不是 DLL 文件,而有些进程看起来并不是 EXE 文件的原因。扩展名只是告诉系统,这一类的文件需要用某一个程序来打开,如果打开时已经指定了程序,那扩展名就无用了,有用的只是文件格式。在 Windows 系统中,可以执行的文件格式叫做 PE 格式(PortableExecutableFileFormat/可移植的执行体文件格式),包括了 EXE、DLL 等。而可执行文件意指文件中存的是指令序列或与其有关的东西,是可以放到内存中一条条执行的。与其对应的是数据文件,其中存的并不是可指行的指令,而供查看的数据,包括图片、音乐、文档等。某类型的文件格式会有相应的程序去读取它们,而我们自己也可以定义自己的文件格式,比如:我们可以定义.SSS 为扩展名的文件格式,并写个程序来读取,这是完全可行的。
扩展名的更改,手动更改一是在 DOS 下或控制台下更改,另外就是在文件夹的菜单中选择“工具”--“文件夹选择”,在弹出的窗口中,将“隐藏已知文件类型的扩展名”前面的勾去掉,这样,文件夹中的文件就会显示全部的文件名与扩展名,就可以随便的更改了。
B、 文件系统格式
文件格式是指文件中的数据存放的规则,什么地方放了什么东西,而什么东西又放在什么地方。而文件系统格式,则是指文件在磁盘中的存放规则,此规则说明的是文件是如何放到磁盘中的,又如何能找到它们。我们接触最多的是 FAT 格式与 NTFS 格式,最早的系统比如 DOS、Win3.X 用的是 FAT16,后来的
Win95\Win98\WinMe 开始使用 FAT32 系统,而 FAT32 只是 FAT16 的一个增强扩充版本,并无实质上的格式改变。NTFS 最早用于 WinNT 系列的操作系统,
系统盘使用 FAT32 文件系统的更加普遍,是因为装机人员出于方便 DOS 下的操作而考虑的,因为 DOS 是不支持 NTFS 文件系统的,这无疑是一种很不负责任的做法。为什么说这是不负责任呢?这就要从 NTFS 文件系统的优势说起了。
NTFS 系统的优势:
(1) 容错性:NTFS 可以自动修复磁盘错误而不显示出错信息,在 NTFS 分区写入文件时,系统会在内存中保留一份拷贝,写完后将写入的与内存中的进行比对,如果发现不一致,就将该扇区标为坏扇区不再使用,以免用户数据丢失。
(2) 安全性:可以设定文件、目录的读写权限,禁止未授权的访问。
(3) 加密:可以对文件进行加密操作。
(4) 文件压缩:对不常用的文件自动压缩以节省磁盘空间,支持单一文件或目录的压缩。
(5) 磁盘限额:对各用户分配可用磁盘空间大小。
(6) 综合索引功能:使文件查找更快速,
(7) 可恢复性:系统发生意外出现数据错误时,可以自动进行恢复。
(8) 其它等等优势……总之 NTFS 比 FAT 有着更高的效率更的安全性更高的……
除了 FAT 与 NTFS 外,其实我们还经常接触另外的两种文件系统格式,它们就是 CDFS(CD-ROM)\UDF(DVD-ROM)。
文件格式有特定的程序来识别并读取使用,而文件系统格式则由特定的驱动来识别并读取使用,这就是我们经常听到的 FSD(文件系统驱动),而 FSD-HOOK 就是 HOOK 这几个驱动了:
CDFS 格式:Cdfs.sys
UDFS 格式:Udfs.sys
FAT 格式:Fastfat.sys
NTFS 格式:Ntfs.sys
C 、 文件读写机制
文件读写离不开缓存管理。从宏观上来说,计算机的数据流是由磁盘流向内存再流向 CPU 的各寄存器,而 CPU 是执行速度最快的,汇编语言之所以被认为是效率最高的语言,很大原因在于使用汇编语言可以直接操作 CPU 的寄存器,可以最大限度的抛开内存与磁盘的读取去利用寄存器。速度其次的,就是内存了,尽力的在内存中读写数据。而速度最慢的,就是磁盘了,直接自磁盘中读数据,是速度最慢的。总之,系统在努力的保证更多的操作都是直接操作的内存而非磁盘,以此来提高系统的整体效率。
但是文件是保存在磁盘上面的,避开磁盘读写显然是不可能,只能是尽力的减少读写磁盘的次数。
那么,系统又是如何来尽量多的读写内存而不是磁盘的呢?这就是我们接下来要讲的三个概念“缓存”、“智能预读”与“延迟写”。
缓存:缓存的用途是将频繁被操作的数据的一个子集保存在物理内存中,这样我们的频繁操作就可以直接操作内存,而不是频繁的读取磁盘了。但系统又如何知道我们要操作哪些数据呢?这就涉及到智能预读的概念了,“智能”:是通过一种科学的计算,来决定哪一部分应该被事先读取,并保存在内存中。当我们打开一个很大的文件或频繁的对某一文件进行操作时,系统会预选读取一部分放到内存中,预先读取哪些是通过计算得来的(这种计算的命中率显然决定了性能)。以后我们的读写操作就都是在读取内存,而非速度低下的磁盘。例如:当打开某一大的文件时,第一次会很慢,但关闭后再打开时会快很多。
延迟写又是什么呢?比如我们修改一个文件,看着其中的一个字母“A”非常的不爽,就将它改成了“B”,改完后感觉仍然不够好,就再改成“C”………这种修改如果系统每次都将修改的结果存到磁盘上,那么我们的磁盘岂不是时时刻刻都在狂转?所以,系统采用了一种延迟写的方法,我们所有的修改都存在了缓存中,当完成一定的积累后,系统再一次性的将所有修改写入磁盘,而这种写是在后台进行的,我们并没有更多的感觉。
这里需要注意的地方是,这种延迟写与前面自启动项篇中注册表 HIVE 文件的延迟写并不是完全相同的。当然了,原理与机制是相同的,都是为了减少读写磁盘的次数也都是利用了缓存机制。但注册表 HIVE 文件的延迟写是由一个专门的注册表文件操作线程负责的,每 5 秒触发并写入一次。而文件的延迟写是由缓存管理器的延迟写出器在一个系统辅线程上每秒钟一次的来执行的,而且,执行并不等于写入,执行一次意指计算一次(计算是否需要写入磁盘写入多少又写入哪些。)
我们抛开缓存管理只谈文件读写,那么其机制就是这样的,系统得到文件读写请求后将请求发送给相关的服务处理程序,服务处理程序则交给文件系统驱动,文件系统驱动进行安全检查,看我们是否有权力进行所要求的操作,如果通过,则首选自缓存中取数据给我们,只有当缓存中没有时,才会自磁盘中定位到数据所在的位置去取数据。
2、 文件的隐藏 、 查找 、 保护与删除
文件的隐藏与保护的方式很多,对系统来说文件夹其实只是一个具有特殊属性的文件而已。所以,文件的保护与隐藏同样适用于文件夹,所以可以利用系统本身的功能来隐藏文件或文件夹(为了讲解方便,后面所指的文件也包括文件夹,隐藏也包括保护)。
A、 利用系统本身的功能隐藏文件
文件本身的属性中,就有“隐藏属性”,当然们勾选了文件的隐藏属性,并设置系统选项为“不显示隐藏文件”时,具有隐藏属性的文件,将不会再显示在文件夹中。在文件上面按鼠标右键,选择“属性”,在属性设置的最下面勾选“隐藏”,就可以设置此文件为隐藏
文件。然后在文件夹上方的菜单里,依次选择“组织”--“文件夹和搜索选项”将选项改为“不显示隐藏的文件和文件夹”,点击“应用”或“确定”,就可以完成设置,然后你就会发现,你刚才设置为隐藏属性的文件,已经不见了。这个设置起来很简单,而简单也就意味着,这种隐藏几乎是没有用的,因为其它人也可以通过这种方法来选择“显示所有文件和文件夹”将你隐藏的文件重新显示出来。有没有办法加强这种方法的效果呢?那我们需要在注册表中进行设置,设置的键为:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\SHOWALL选中此键后,再在右侧的设置窗口中,将“CheckedValue”这一项的值改为“0”,就完成了增强版的文件隐藏设置。
效果:我们再打开 文件夹选项设置窗口,然后选中“显示所有文件与文件夹”,选“确定”,去文件夹中看看,刚才我们设置为隐藏的文件仍然看不到。再次打开文件夹选项设置窗口,骇然发现,我们刚刚设置成的“显示所有文件与文件夹”又被自动的设置成了“不显示隐藏的文件和文件夹”。
-----------------------END-----------------------




