zoukankan      html  css  js  c++  java
  • 恶意代码实验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.查看

  • 相关阅读:
    图床_shell命令passwd
    图床_shell命令usermod
    图床_shell命令groupadd
    图床_shell命令userdel
    图床_shell命令useradd
    图床_shell命令whereis
    图床_shell命令find
    图床_shell命令which
    图床_shell命令locate
    图床_shell命令free
  • 原文地址:https://www.cnblogs.com/wqnmlkb/p/14534211.html
Copyright © 2011-2022 走看看