恶意代码实验FAT32文件系统数据恢复

FAT32文件恢复

一、FAT文件系统与文件恢复

1.FAT32文件系统结构介绍

FAT32文件作为Windows操作系统的主流文件,其文件系统主要由MBR、DBR及其保留扇区、FAT1、FAT2和DATA五部分组成。FAT1与FAT2的大小相同,FAT可变长度,其长度随着分区大小、每簇扇区数的变化而变化。在FAT32文件中,把目录当文件管理,所以没有独立的目录区。

图1.1FAT32大致结构

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.1新建文本文档

2.使用winhex打开C盘查看磁盘信息

打开winhex,选择文档对应的磁盘。比如说我这里就是C盘。

图2.2打开C盘

按照下图方查看磁盘信息

图2.3打开引导扇区

如图2.4所示每个扇区包括512字节,每一簇有16个扇区,共能存储512*16=8KB的数据

图2.4查看磁盘信息

3.查看文档在磁盘中存储形式

单击打开

图2.5打开根目录

单击右箭头查找文档的在根目录中的信息

图2.6文档在根目录中的信息

文档的大小为0x00 00 60 20=24608,[24608÷8÷1024]=3,因此需要四个簇来存储文档的内容,存储的位置为0x00 00 39 E0
点击跳转到FAT 1,找到存储文档内容的位置,如图2.7所示,存储数据的簇分别是0x000039E3,0x000039E4,0x000039E5,还有最后的0xFFFFFF0F共4个簇,与前文运算结果相一致。经过观察发现一般文件不会从首簇号开始存数据,会在下一个簇或者更远一些开始存

图2.7具体存储数据的磁盘位置

4.右键删除的恢复

图2.8右键删除文档

图2.9删除成功

图2.10刷新视图

发现根目录下的第一个字节变成了E5,其他部分没有变化

图2.11不同的数据

将E5改回原来的CA或者其他任意16进制数

图2.12改回原状态

图2.13保存扇区

刷新C盘后文档又重新出现,且可以查看

图2.14刷新

5.shift+delete删除的恢复

图2.15 shift+delete删除

重复上一步中的方法后发现文件回到了C盘但无法查看

图2.16文件内容损坏

回到FAT 1后发现分配给文档的簇已经被清零

图2.17文件内容所在磁盘空间

对照先前的数据修改复原

图2.18修改回原状态

图2.19可以查看

三、winXP虚拟机安装以及winhex安装

1.winXP虚拟机安装

itellyou操作系统下找到XP的镜像

图3.1 itellyou

激活码: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

4.跳转至文件末尾

5.复制

6.输出至新目录(旧目录)

7.保存

8.查看

posted @ 2021-03-14 21:13  20181204王浩博  阅读(587)  评论(0编辑  收藏  举报