恶意代码实验FAT32文件系统数据恢复
FAT32文件恢复
一、FAT文件系统与文件恢复
1.FAT32文件系统结构介绍
FAT32文件作为Windows操作系统的主流文件,其文件系统主要由MBR、DBR及其保留扇区、FAT1、FAT2和DATA五部分组成。FAT1与FAT2的大小相同,FAT可变长度,其长度随着分区大小、每簇扇区数的变化而变化。在FAT32文件中,把目录当文件管理,所以没有独立的目录区。
1.1 主引导记录
硬盘的第1个扇区叫 MBR (Master Boot Record)扇区,为主引导扇区记录,占512字节,MBR的引导程序占前446个字节,后64个字节为硬盘分区表DPT,末尾的两个字节 “55AA”是分区有效结束标3志。 引导标志位只能是 00H 和 80H,80H指活动,00H指非活动, 其余值默认非法。
1.2 操作系统引导记录
DBR (DOS Boot Record),操作系统引导记录。文件系统的 DBR 包括跳转指令、OEM 代号、BPB、引导程序和结束标志。 对 FAT32 进行数据恢复时,通常可由引导扇区 BPB 参数中的保留扇区数、FAT数、每个 FAT32所占扇区数来定位根目录的起始位置。
1.3 文件分配表
FAT(File Allocation Table),文件分配表。在FAT32文件中有两个相同的FAT,第一个称为主FAT,另一个是FAT1的备份。FAT是位于DBR之后,同一个文件的数据并不一定完整地存放在磁盘的一个连续区域内,以链式存储方式记录于FAT表中。
1.4 文件系统目录项
FAT32文件系统没有独立的根目录区,分区根目录下的文件及文件夹的目录项存放在根目录区中,分区子目录下的文件及文件夹的目录项存放在子目录区中,根目录区的和子目录区都在数据区中。文件目录项(FDT)占32字节,子目录项的长度为零,已删除目录项的首字节值为 E5。
1.5 数据区
数据区位于FAT2之后。对数据区中数据定位,首先通过分区表信息, 定位相应的 DBR 扇区,得到 DBR 保留扇区数值和每个 FAT扇区数,通过相应的计算公式得到分区的数据区起始扇区。
2.DBR扇区及其保留扇区
FAT32引导扇区结构 (仅取关键字节)
字节偏移(16进制) | 字节数 | 含义 |
---|---|---|
0x00-0x02 | 2 | 汇编指令,跳转到引导代码处 |
0x0B-0x0C | 2 | 每扇区字节数,一般为512 |
0x0D | 1 | 每簇扇区数,为2个整数次幂,最大不超过64 |
0x20-0x23 | 4 | 文件系统扇区总数 |
0x24-0x27 | 4 | 每个FAT表占用扇区数 |
0x2C-0x2F | 4 | 根目录起始簇号 |
0x52-0x59 | 8 | 文件系统格式的ASCII码 |
0x5A~0x1FD | 410 | 引导代码 |
0x1FE-0x1FF | 2 | 签名“55AA” |
0x200~0x203 | 4 | 扩展引导标志“52 52 61 41” |
0x204~0x3E3 | 480 | 全部置0 |
0x3E4~0x3E7 | 4 | FSINFO签名“72 72 41 61” |
0x3E8~0x3EB | 4 | 文件系统的空簇数 |
0x3EC~0x3EF | 4 | 下一可用簇号 |
0x3FE~0x3FF | 2 | 签名“55AA” |
offset 0 1 2 3 4 5 6 7 8 9 A B C D E F
00000000 | EB 58 90 4D 53 44 4F 53 35 2E 30 00 02 10 22 00
00000010 | 02 00 00 00 00 F8 00 00 3F 00 FF 00 3F 00 00 00
00000020 | 9A E5 3F 01 F3 27 00 00 00 00 00 00 02 00 00 00
00000200 | 52 52 61 41 00 00 00 00 00 00 00 00 00 00 00 00
000003E0 | 00 00 00 00 72 72 41 61 72 BF 13 00 E9 39 00 00
对于第一行来说:0x00-0x10:58EB跳转指令,即JMP 58,90为NOP指令,后面8个字节表示文件系统标志和版本号为MSDOS5.0,0200指每扇区512字节.,10 指每簇有16个扇区,0022指保留扇区数有34个, 02 指FAT表个数为2。
0x20-0x23 :文件系统总扇区数为013FE59A,每个FAT表占用000027F3个扇区,根目录所在的第一个簇的簇号为0x02。
0x3E8-0x3EF: 文件系统空簇数为0013BF72,下一可用簇号为000039E9。
3.FAT表
FAT表项的前两个FAT项为文件系统保留使用,0号FAT为介质类型,1号FAT为文件系统错误标志。用户的数据从2号FAT开始记录。
如果某个文件占用很多个簇,则第一个FAT项记录下一个FAT项的编号(既簇号),如果这个文件结束了,则用“0F FF FF FF”表示。
定位FAT与数据区绝对位置的方法:
1、从MBR的分区表中得知分区的起始扇区,偏移到此扇区。
2、从DBR的BPB中得知DBR的保留扇区数,FAT表的个数,FAT表的大小。
3、FAT1=分区起始扇区+DBR保留扇区,FAT2=分区起始扇区+DBR保留扇区+FAT1,根目录=分区起始扇区+DBR保留扇区+(FAT表 * 2)+(簇大小 * 2)
4.根目录
字节偏移(16进制) | 字节数 | 含义 |
---|---|---|
0x00-0x07 | 8 | 文件名,不足8个字节0x20补全 |
0x08-0x0A | 3 | 扩展名 |
0x0B | 1 | 文件属性,0x20表示存档,0x00表示读/写,0x01表示只读,0x02隐藏,0x04表示系统,0x08卷标,0x10子目录 |
0x0D | 1 | 创建时间的10毫秒位 |
0x0E-0x0F | 2 | 文件创建时间包括时分秒 |
0x10-0x11 | 2 | 文件创建日期包括年月日 |
0x12-0x13 | 2 | 文件最后访问日期包括年月日 |
0x14-0x15 | 2 | 文件起始簇号的高16位 |
0x16-0x17 | 2 | 文件最近修改时间包括时分秒 |
0x18-0x19 | 2 | 文件最近修改时间包括年月日 |
0x1A-0x1B | 2 | 文件起始簇号的低16位 |
0x1C-0x1F | 4 | 文件的长度 |
二、实验步骤
1.新建文档
新建一个文本文档,尽量大一些,否则的话可能都占不满一个簇。
2.使用winhex打开C盘查看磁盘信息
打开winhex,选择文档对应的磁盘。比如说我这里就是C盘。
按照下图方查看磁盘信息
如图2.4所示每个扇区包括512字节,每一簇有16个扇区,共能存储512*16=8KB的数据
3.查看文档在磁盘中存储形式
单击打开
单击右箭头查找文档的在根目录中的信息
文档的大小为0x00 00 60 20=24608,[24608÷8÷1024]=3,因此需要四个簇来存储文档的内容,存储的位置为0x00 00 39 E0
点击跳转到FAT 1,找到存储文档内容的位置,如图2.7所示,存储数据的簇分别是0x000039E3,0x000039E4,0x000039E5,还有最后的0xFFFFFF0F共4个簇,与前文运算结果相一致。经过观察发现一般文件不会从首簇号开始存数据,会在下一个簇或者更远一些开始存
4.右键删除的恢复
发现根目录下的第一个字节变成了E5,其他部分没有变化
将E5改回原来的CA或者其他任意16进制数
刷新C盘后文档又重新出现,且可以查看
5.shift+delete删除的恢复
重复上一步中的方法后发现文件回到了C盘但无法查看
回到FAT 1后发现分配给文档的簇已经被清零
对照先前的数据修改复原
三、winXP虚拟机安装以及winhex安装
1.winXP虚拟机安装
itellyou操作系统下找到XP的镜像
激活码:CM3HY-26VYW-6JRYC-X66GX-JVY2D
2.winhex安装
提取码:NMSL
特别鸣谢:magic_jiayu的博客
NTFS文件恢复
一、NTFS文件系统
1.引导扇区
0x013FE599为磁盘的扇区总数,等于20964761*512/1024/1024/1024约等于9.9G,磁盘实际大小为9.99G
引导扇区模板,可看出每个扇区512字节,每个簇有8个扇区,一个簇可存储4KB内容
2.MFT(主控文件表)
MFT是一个与文件相对应的文件属性数据库,它记录了除文件数据外的所有属性,甚至小文件
的数据本身也包含在MFT中。MFT以文件数组来实现,每个文件记录的大小固定为1KB
如上图所示,0xFFFFFFF为结束标志,8字节之前的0x31表示一个字节代表文件存储的簇数0x1,后三个字节代表起始逻辑簇号0x0BFFFF,上一行的四个字节代表文件实际大小也就是我们需要的偏移量0x08
3.FR(文件记录)
数据无法容纳在一个FR中,Data run,以00结束
二、实验步骤
1.删除文件后通过搜索找到文件记录
2.观察记录找到文件内容所在磁盘区域
0x31表示一个字节代表文件存储的簇数0x7,后三个字节代表起始逻辑簇号0x13FE5A,上一行的四个字节代表文件实际大小也就是我们需要的偏移量0x6020
3.跳转至文件对应簇
0x13FE5A = 1310298