U盘枚举与FAT文件系统解析

U盘枚举与FAT文件系统解析

抓包工具使用的是bus hound。

本文主要讲述的是u盘从插入到能够从计算机看到盘符及其空间这个过程中,抓包分析详细的交互过程。

U盘插入到能够访问U盘主要分为两个大的阶段:

  1. U盘枚举,能够显示盘符。
  2. 解析设备文件系统(读盘),能够访问盘符。

注意:以下交互过程建立在我的U盘抓包数据基础上,不同U盘可能会有些许不同。(建议用正版,正规U盘抓包分析)

U盘枚举:

  • 请求设备描述符。  <———–设备响应设备描述符
  • 请求配置描述符。  <———–设备响应配置描述符
  • 请求字符串描述符。<———–设备响应字符串描述符

抓包如下:

这里我就拿2.1.0来解释一下,02表示配置描述符,09表示数据长度9字节

2.2.0返回信息(IN):0020表示数据总长度32字节,01表示该配置仅支持一个接口,01该配置的值为1,00表示描述该配置的字符串索引值取0,即表示没有字符串,80表示设备的属性为0x80,即表示设备是总线供电的,64表示设备所需的电流为0x64*2=200mA  。

描述符的结构如下,其他的请对照表进行解析:

  • 设置配置(SET CONFIG)
  • 设置接口(SET INTERFACE)
  • 获得最大逻辑单元(GET MAX LUN)  返回0代表一个逻辑单元,即一个盘符,以此类推。—————————-至此U盘的枚举差不多已经完成。

抓包如下:

 

FAT32文件系统主要分区:

DBR及其保留扇区,此处为操作系统引导记录,之后是一段保留扇区。(MBR前面可能会有一段隐藏扇区)

FAT1,文件分配表(主)。

FAT2,文件分配表(FAT1的备份)。

DATA,数据区,其中包含目录区域。

 

解析设备文件系统

  • 读取U盘内存大小。(READ CAPACITY)

IN:返回一个容量大小0x00ea 71 3f,每个逻辑块大小0x00000200,即512字节。算出来是7.3G(8G U盘)

  • 读取U盘的DBR区域,该区域中主要包含的信息:隐藏扇区数,保留扇区数,每扇区的字节数,每簇的扇区数,FAT数,磁道数,磁头数,总扇区数等等信息。

图中“开始”标记的地方是从第12个字节开始的地方,该区域是MBR中的BPB区域,具体字段含义如下表所示(该表内容来自于http://blog.csdn.net/todototry/article/details/1370709)。

从中我们可以读取如下信息(我只解释我用得到的):

0200:每扇区512字节

08:每簇8个扇区

0b06:保留2822个扇区

02:FAT数

0000003f:隐藏扇区63个

00003a7d:每个FAT有14973个扇区

  • 读文件分配表(FAT的主要作用是标明分区存储的介质以及簇的使用情况)

通过DBR分区表我们读出FAT表的地址,文件分配表以4个字节为一个簇号,如果某个文件占用很多个簇,则第一个FAT项记录下一个FAT项的编号(既簇号),如果这个文件结束了,则用“FF FF FF 0F”表示。也就是说文件分配表与数据的内存映射是4bytes:4Kb。在此次测试U盘中,每扇区字节数为512,每簇扇区数为8,也就是一簇是4096字节。格式如下:

我们知道FAT区是在DBR区后面,DBR区的逻辑地址是00 00 00 3f(因为DBR前面还有63个隐藏扇区),DBR后面是2822个保留扇区。所以下一次的FAT读取是从00 00 0b 3f开始的,一直读完一个FAT表项即读到FAT1最后一个扇区00 00 45 bf(一个FAT表项是14973个扇区)。

这是FAT第一个扇区(00 00 0b 3f):

这是FAT最后一个扇区(00 00 45 bf):

在读完文件分配表以后,就能够看见盘符大小,正常访问盘符了。

文中的不对之处,望各位大大指出谢谢。

参考:

http://www.blogfshare.com/detail-fat32-filesys.html

http://blog.csdn.net/tanjiaqi2554/article/details/78430222

电脑圈圈写的《圈圈教你玩USB》,文中部分图片来自这本书。




So BadJust So SoGoodCoolPretty Cool (5 人已评分, 平均分: 4.80 )
Loading...

发表评论

电子邮件地址不会被公开。 必填项已用*标注