《用WIN32程序探秘NTFS扇区存储》
——NTFS系统的基本特性、扇区分配、EFS加密、数据压缩、隐藏机密文件、数据恢复、数据属性分析
作者:宋群生 宋亚琼 作者主页:http://www.jnhdd.com
第1部分 WIN32程序
这一部分介绍21个WIN32工具程序,这些工具程序概括起来讲,主要有三项功能。
第一项功能是读写物理硬盘的扇区数据,包括将扇区数据保存到文件中进行备份,或是将先前备份到文件中的数据写回到扇区中去。
第二项功能是根据操作者的设定,查找物理硬盘中具有某些特征的扇区地址,如系统引导扇区、存储某一文件名的扇区、具有某些字段值的扇区等。
第三项功能是处理文件中的数据,如对两个文件的内容进行比较、对文件中的字节数据进行修改、将一个大文件剪切到指定的字节数等。
这21个WIN32工具程序,虽然在本书中是为了探索NTFS的扇区存储规律而编写的,但是这些程序具有通用性,它们可以更广泛地应用于其他领域。因为计算机中的所有数据,不管是操作系统的、文件系统的、还是用户的,最后都是以磁介质的形式存储在物理磁盘上。所以只要掌握了对磁盘扇区基本的读写与分析方法,就能不受操作系统和文件系统的限制,开拓更多的应用空间。
为了使读者能正确地运行和使用这些工具程序,现将它们的主要特点和运行注意事项列举如下:
1.每个工具程序只具备一项,或至多几项功能。这样能使操作者有目的地使用工具程序,去解决某一个具体问题。对于一些扇区操作不太熟练的读者,功能比较单一的程序,使用时更容易上手。
2.笔者在编写工具程序时,尽量使程序界面具有“操作向导”式的显示风格,这样能引导操作者一步一步地循序操作。
3.工具程序不同于公开发表的成品软件,它只具备基本功能,而一些检测、异常处理、软件保护等功能没有设置。这样处理的目的,是使程序运行时简捷、高效。因为任何附加功能,都要增加程序的运行开销。
4.由于程序中省略了一些附加功能,所以操作者在运行程序时,必须按照要求进行正确地操作。如果操作失误,可能会造成一些不良后果,具体有以下几个方面:
●在将扇区数据保存到文件中进行备份时,输入的文件名要保证在当前目录中是唯一的。如果当前目录中还有其他的同名文件,则原来的文件将会被破坏。因为将数据保存到文件时,是以“写”方式打开文件,这种方式是按照新建立的文件写入数据,原来的数据就被覆盖掉了。
●输入文件名时,文件名连同其全路径所使用的字符数不要太多,一般限制在40个字符以下即可,最好是在根目录下运行工具程序并建立文件。因为笔者在编写程序的源代码时,定义的数组下标值不是太大。如果下标值越界,程序运行可能失败。
●在输入某些由操作者设定的参数时,一定事先了解该项参数的取值范围,如硬盘编号和扇区编号等。如果超过了取值范围,程序本身虽没有提示功能,但操作系统可能会发现错误并作出提示,不过这种提示一般不能确切地说明错误的实质。
工具程序中读写扇区数据时,是使用线性寻址方式对扇区进行定位的,线性寻址方式的有关规定如下:
1.物理硬盘是用其编号来识别的,起始号为“0”。一般情况下,都将硬盘的跳线设置在主盘的位置。这时接在第一IDE口上的是“0”号硬盘;接在第二IDE口上的是“1”号硬盘;如果还接有SCSI硬盘,则其编号为“2”。需要说明的是,硬盘的编号是由主板BIOS程序进行识别的。接在同一位置的硬盘,不同的主板BIOS,可能赋予它不同的编号。
2.物理扇区的地址是用其线性编号来识别的,起始号为“0”。这种寻址方式与硬盘分区和逻辑驱动器无关,从“0”开始一直编到最后一个扇区,是由BIOS磁盘服务程序管理硬盘时虚拟的。
3.每个扇区中,包含512个字节。字节在扇区中的地址,是用字节位移来标识的,其起始号为“00H”,写成十六进制的形式。这种寻址方式在编程时比较好用,但在观察和寻找扇区中的字段值时,感觉不太方便。
为此笔者在编写程序时,将对话框中显示的扇区字节从“1”开始编号,一直编到扇区中的最后一个字节。这样每行显示16个字节,一共显示32行。在查找扇区中某一个字节的位置时,就与编号统一起来了,并且在排列上感觉很有对称性。
为了使读者在分析扇区数据时有一个参考的对象,笔者将自己所用的计算机作为标本,进行各种扇区字段的分析和有关数据计算。
笔者使用的计算机上挂接了两块硬盘,都是西部数据公司生产的。一块容量是6.2GB,接在第一IDE口上,硬盘编号是“0”;另一块容量是40GB,接在第二IDE口上,硬盘编号是“1”。
欢迎访问本书作者主页:http://www.jnhdd.com
[
本帖最后由 清水儿 于 2007-3-3 14:14 编辑 ]