简单说说WinHex(二)创建新文件 您所在的位置:网站首页 winhex无法创建 简单说说WinHex(二)创建新文件

简单说说WinHex(二)创建新文件

#简单说说WinHex(二)创建新文件| 来源: 网络整理| 查看: 265

今天就用WinHex这个软件,通过修改十六进制数据来修改文件目录项,以达到在一个U盘中创建文件夹与文件的目的。

我用的U盘,里面的文件系统是FAT32。

以下就是FAT32文件系统的整体布局:文件目录项就在每一个分区中的DADA区。

以管理员身份打开WinHex软件,既然要修改文件系统中的数据,就在检测到的磁盘中选择物理磁盘。

一般在制作过程中,U盘都是被做成一个分区的,我用的这个也是,因此在界面中只能看到界面中只有一个分区表;

在“可移动磁盘”中偏移量从0x000000000~0x0000001F0这个范围内,就是FAT32文件系统整体布局中的MBR十六进制数据。

MBR由三部分组成,引导代码,分区表和结束符标志。

从偏移量0x000000000~0x0000001BD这部分时就是引导代码;偏移量0x0000001BE~0X0000001FD就是分区表(即红框);偏移量0x00000001FE和0x00000001FF就是结束标识符了,规定分区结束标识符是“55 AA”,如果写成其他数据,就会显示该U盘还未初始化。

红框中的分区表共有64个字节,一个区占16个字节,所以原本该U盘的是可以分成四个区的,图中用蓝框标出来的就是每一个分区所占据的偏移量,但是正如图中所示,只有前16个字节有数据,后面都是00,即没有数据的,说明该U盘只有一个分区。

而在“可移动磁盘2,分区1”中,出现是另外一番景象,此时的偏移量0x0000000~0x0000001F0就是FAT32文件系统的DBR,DBR中记录了文件系统在磁盘上的起始位置、大小、FAT表个数以及大小等相关信息。

而绿框中的文件,就是U盘中的逻辑文件,但是并不代表每一个都是存在的,也有可能是已经被删除的,但是文件数据依旧被保留了下来。

 

鼠标点击“根目录”,会发现下面的显示框已经调到了偏移量0x000F92000。这个根目录就是我们这一整个分区中DATA数据最开始的地方,里面记录这该分区中每一个文件的信息,比如文件属性,建立时间,建立日期,访问日期,文件簇号(即文件内容存储的地方),修改日期,所占字节等。

而记录这些信息的地方,就叫文件目录项,从偏移量0x000F92000开始,存放的都是文件的十六进制属性数据,每一个文件属性占32个字节,而他们的文件名,会显示在右边蓝色框框,是的,显示的都是乱码,不过从乱码中也能根据点蛛丝马迹知道具体是哪个文件。

如果点击了除”根目录“外的其他文件,也会跳转到一处偏移量,不过那已经不再是文件目录项了,而是该文件中存储的内容,记住,只有”根目录“跳转到的偏移量才是U盘的文件目录项。

好,现在来开始创建文件,从偏移量0x000F92000开始往下找,有数据的说明已经是有文件了,所以我们就找没有数据的,即都是0的位置,那里就是我们创建文件的开始地方。

往下找找到了0x000F92A20和0x000F92A30可以存放新的文件,于是我们就在这两行修改数据便可。

假设现在我们建一个文件,文件名为WINHEX.TXT,创建日期为2019.8.7,访问日期为2.09.8.8,修改日期为22019.8.8;创建时间为23:25:10,修改时间为23:25:20,文件大小为1000字节。

首先,偏移字节为00处,存放该文件的文件名中第一个ASCII字符,很明显,第一个字符为W,ASCII值为87,因此转成十六进制是57。

偏移字节为01~0A这10个字节中,就存放文件名中除了第一个字符的其他字符,如果字符数量不够,不足的部分用0x20填充,注意的是08,09,0A这三个自己,放的是文件的后缀。

剩下的INHEX的ASCII值为73,78,72,69,88,因此十六进制是49,4E,48,45,58.不足的用0x20填补。

后缀中TXT的ASCII值为84,88,84.因此是十六进制是54,58,54。

偏移字节0B中存放的是该文件的属性:

0x01——只读;0x02——隐藏;0x04——系统文件;0x08——卷标;0x10——目录;0x20——存档;

我们新建文件后,是要在里面存放数据的,因此是存档文件0x20。

偏移字节0C是保留字节,不做修改,保留原来值00。

偏移字节0D中存放创建时间,精确到十分之一秒,什么意思呢,因此实际上,一个文件的创建时间电脑是可以精确到ms级别的,比如23时25分10秒12毫秒,这里我们就写00,意为精确到0毫秒。

偏移字节0E~0F这两个字节存放文件的创建时间,16bit中要存放时、分、秒三种信息,其中时占5bit,分占6bit,秒占5bit,其中秒是以2s为一个单位的。

创建时间为23:25:10(单位是5),转换成二进制分别是10111,011001,00101(5的二进制),组成16bit就是1011101100100101,即0xBB25;

需要注意的是,FAT32系统中数据的存放都是采用LSB模式,即低位先发,因此应该先发25,再发BB。

偏移字节10~11中存放文件创建日期,16bit中要存放年,月,日三种信息,年占7bit,月占4,日占5bit。

之前是跟时分秒所占bit不同,是因为日的有效值是1~31,正好用5bit可以放满;月有效值为1~12,只需要4bit就可以完全表示;年的有效值为0~127,这是一个相对于1980的相对值(年份计算的时候需要减去1980),因此可以表示从1980~2107之间的任何一年。那2107年后呢,拉闸呗。

创建日期2019.8.7,转化为0100111,1000,00111,组成就是0100111100000111,即0x4F07,由于是低位先发,因此是07 4F。

偏移字节12~13中存放文件的最后访问日期,为2019.8.8,同样是年占7bit,月占4,日占5bit,即0100111,1000,01000,组成16bit就是0100111100001000,即0x4F08,由于LSB,因此是08 4F。

偏移字节14~15中存放的是文件起始簇号的高两个字节,在“剩余簇”中我们就可以看看还剩下多少簇是可以用的,我们选了14簇号,簇号的表示是4个字节的,簇号14应该表示为0x0000000E。这里存放高两个字节,因此是00 00。

偏移字节16~17存放文件的最后修改时间,为23:25:20,与创建时间格式一样,为10111,011001,01010,组成16bit为1011101100101010,即0xBB2A,由于LSB,因此是2A BB。

当然,如果严格来说,虽然给文件定下了簇号,但还是需要在FAT1表或者FAT2表(两个表是同步的)中给该簇号一个结束标志符,表示该文件占有簇号只有14号(一个簇占4个字节),当然如果文件内容过大,需要占多个簇号的话,就在簇号中数据下一个簇号的十六进制位置数据,就跟链表一样。

便宜字节18~19存放文件最后被修改的日期,为2019.8.8,格式与创建日期一致,为0100111,1000,00111,组成16bit为0100111100000111,即0x4F08,低位先发,因此是08 4F。

偏移字节1A~1B存放文件起始簇号低两个字节,刚才知道簇号14为0x0000000E,低两个字节就是0x000E,低位先发,因此是0E 00。

偏移字节1C~1F存放文件的字节大小,占4个字节,我们设置为1000字节,即0x000003E8,低位先发,因此是E8 03 00 00。

在WinHex设置完后,点击保存,就可以在U盘中看到新建好的文件WINHEX.TXT了。

这时候我们试着在里面写入点什么数据吧,就写"HAHAhaha"这几个字符。我们点击WINHEX.TXT这个文件,就会跳转到0x000FAA000偏移量处,从这里开始存放的,就是文件中的内容了。

直接输入“HAHAhaha"几个字符的ASCII值得十六进制数据(这里就不用低位先发了),即48 41 48 41 68 61 68 61。

保存后就可以直接打开WINHEX.TXT文件,可以看到里面有我们刚写进去的数据。

注意:在WinHex创建文件的过程中,文件名字符必须要大写,文件后缀也是要大写,写成其他的,最后在打开文件的时候会提示此文件是不存在的,目前还不知道是软件原因还是什么其他原因。

不过这也不用纠结,毕竟WinHex软件的主要目的是用来检查和修改数据的,如果要在里面创建文件,耗费的工作量和时间都是巨大的,完全没必要,完全可以直接点几下鼠标新建文件,瞬间建立。

在WinHex尝试创建文件无非是为了更好的理解FAT32文件系统的工作原理,以后需要修改文件属性啥的,就立马知道该去什么抵挡修改以及怎么修改了。

 

 

 

 

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有