目录
第11课时.创建一个文件对文件系统做了哪些操作
干货
第12课时.用winhex手工创建一个文件
第13课时.删除一个文件对文件系统做了哪些操作
第14课时,清空回收站对文件系统做了什么操作
第15课时.按SHIFT彻底删除对文件系统做了什么操作
第16课时.恢复删除的文件-用winhex显示删除过的文件
第17课时.有高位簇的文件删除后对文件系统做了什么操作
第18课时.恢复删除的文件-手工计算被清空的高位簇(SHIFT)
第19课时 剪切文件对文件系统做了什么操作
又来?
第11课时.创建一个文件对文件系统做了哪些操作
- 当文件被复制到根目录(新建一个.txt:
-
- 根目录数据会发生变化由全 00变为 文件记录数据
- 新建一个aaa.txt的空文档 ,只是多了一条目录项 ,同上
- 给aaa.txt增加内容时:
-
- 1号扇区文件系统的空闲簇号减少 (3E8-3EB绝对路径)
- 下个可用簇改变 (3EC-3EF绝对路径)
- FAT1 、FAT2 多了个FAT表项
- 目录项不同
- 数据区的数据改变
干货
txt特殊,一般文件操作按(给aaa.txt增加内容时)进行学习
第12课时.用winhex手工创建一个文件
学这一课时你要用到一个表格
短文件名目录项数据结构
偏移(16进制) | 描述 |
00-0A | 文件名的ASCII码 |
0B-0B | 文件属性 0x01:只读 ;0x00读、写;0x02隐藏;0x04系统 0x08:卷标;0x10目录;0x20:存档;0x0F长文件名 |
0C-0C | 保留 |
0D-11 | 创建时间 |
12-13 | 最后访问时间 |
14-15 | 起始簇的高16位 |
16-19 | 最后修改时间 |
1A-1B | 起始簇的低16位 |
1C-1F | 文件的大小字节数 |
- ASCII码文件名填充(00-07)
- 后辍扩展名(08-09)
-
- 目录项目(0C)控制大小写(扩展名和文件名)(18)16=(11000)2 高一位表示扩展名是否小写(1小写) 高二位表示名称是否小写(1小写)
-
-
- 后缀修改(先以大写写入)
-
-
-
-
- TXT后缀(大写):54 58 54
- TXT后缀(小写):(0C)改成18
-
-
-
-
- 名称修改(先以大写写入---英文)
-
-
-
-
- TXT(小写):(0C)改成18
-
-
- 普通类型文件(0B)
- 创建时间(0E-11)
-
- 在数据解释器中输入数据,DOS,自动生成
- 访问可以和(10-11)数据相同-----(12-13)
- 最后修改时间(16-19)
干货:
手工创建文件的流程:
- 新建一个目录项
- 给数据区的内容赋值
- 给FAT1表相应的FAT表项标记簇已用
课后实践
目的:用winhex手工创建一个名为《abc.txt》 里面的内容是abcde123456789
ANSI(ABC--先大写):414243
ANSI(TXT--先大写):545854
(根目录下)构建文件名
就这样 妥了🐱🏍
填充文本数据(我的是9号簇)
9号簇
ANSI:6162636465313233343536373839
第13课时.删除一个文件对文件系统做了哪些操作
问题:删除文件到回收站做了什么操作 ?
- 1号扇区的空闲簇号-1 ----(1号扇区)
- 下个可用簇向下移了一个簇 ----(1号扇区)
- FAT1 和FAT2 多了一个FAT表项 ----(FAT1 AND FAT2)
- 文件目录项第一个字节变成0XE5-----(如果是删除则是E5)
- 回收站的目录里 -----------------------($RECYCLE.BIN回收站)---根目录文件放回收站
- 多了两个目录项 -----------------------($RECYCLE.BIN回收站)
- 数据区多了一个配置文件的内容
第14课时,清空回收站对文件系统做了什么操作
- 1号扇区 空闲簇数 增加 2
- 下个可用簇号 改变
- FAT1和FAT2相应的表现改变
- 回收站的子目录里面的相应的两个目录项第一个 字节根改成0XE5
第15课时.按SHIFT彻底删除对文件系统做了什么操作
走了第1章节的一半
目的:按SHIFT彻底删除对文件系统做了什么操作
直接SHIFT键删除,用对比分析工具分析
很棒
分析一下变动的扇区
- 1号扇区的空闲簇号变大
- 下个可用簇号改变
- FAT1和FAT2会释放相应的FAT表项
- 目录项的第一个字节改成0XE5
第16课时.恢复删除的文件-用winhex显示删除过的文件
简单的方法(全自动)
- 直接在Winhex目录项查看到
- 右键恢复---->恢复/复制
- 文件名称不完整---(正常E5)
复杂一丢丢的(手动)
- 目录项查找文件名(E5开头)
- 文件大小(1,292,559) 簇(18,203)
- 跳转到簇(18,203) 然后选择头起始位----->偏移【文件大小(1,292,559】为尾巴
- 直接复制,到新文件
- 搞定
课后实践
目的:恢复222文件夹里的《Camtasia Studio 8.6.zip》的文件
手动版本,自动版本(否,分配)
- 打开我们可爱的Winhex
- 找到222目录项
- 点一下
- 看看哪个是-----Camtasia Studio 8.6.zip
- 很棒,一看就能找到(或者使用ANSI工具)
-
- E5很棒
- 第4号簇 文件大小(298,181,061=284MB)
- 直接复制起始 偏移 尾巴 到新文件
- 搞定
-
- 因为簇看错翻了2次车🚗
睡觉
第17课时.有高位簇的文件删除后对文件系统做了什么操作
上知识点
- 1号扇区 空闲簇数 和下个可用簇号改变
- 文件对应的FAT1和FAT2的FAT表现清空
- 目录项的第一个字节变成0XE5
- 目录的项的高位簇被清零 ---(全自动恢复不使了)
第18课时.恢复删除的文件-手工计算被清空的高位簇(SHIFT)
数据一多就得用高位簇
课上实践
目的:恢复出《字符编码转换器.rar》
- 字符编码转换器------>ANSI编码------>D7D6B7FBB1E0C2EBD7AABBBBC6F7
- E5 -->32-1的偏移
数学问题来了
已知低位簇为:18,344簇(619712扇区)求高位?求文件存放数据位置
方法1 枚举法
低位簇+65536*高位簇=文件存放位置(簇)
都是理科生,我就比较直观一些
#include <stdio.h> int DW_SQ; //文件低位簇 int GW_SQ; ////文件高位簇 int Date; //可能存放的位置 int main(){ printf("请输入初始扇区:\n"); scanf("%d",&DW_SQ); for(GW_SQ=0;GW_SQ<65536;GW_SQ++) //有65536种可能性 ---00到FF FF { Date=DW_SQ+65536*GW_SQ; printf("%d\n",Date); } retuen 0; }
比如题中的低位簇为:619712扇区 文件大小(59,948B)
#include <stdio.h> int GW_SQ; int Date; //可能存放的位置 int main(){ printf("请输入初始扇区:\n"); for(GW_SQ=0;GW_SQ<65536;GW_SQ++) //有65536种可能性 ---00到FF FF { Date=619712+65536*GW_SQ; printf("%d\n",Date); } retuen 0; }
- 一个一个试嘛(一般高位簇很小)
- 第高位第4个簇
- 转跳到数据扇区280488簇(9008320扇区)
- 复制文件
- 翻车
- 最后对比了一下是数据不一样
-
- 翻车
课后实践
目的:恢复在根目录下的WINHEX.zip文件
- 找到根目录
- ASIN编码:57494E484558
-
- 搜索
- 高位簇(00 00---被删除清零了)低位簇(20965簇)大小(1,292,559)
- 带公式
-
- 低位簇+65536*高位簇=文件存放位置(簇)
- 20965+65536*高位簇=文件存放位置(簇)
- 答案:20965+65536*1=86,501
第19课时 剪切文件对文件系统做了什么操作
剪切文件到别的盘后做了哪些操作?
- 1号扇区空闲簇数 和下个可用簇号改变
- 文件对应的FAT1和FAT2的FAT表现清空
- 目录项的第一个字节变成0XE5 (俩长 一短 目录项)
- 目录的项的高位簇被清零
剪切文件到别的文件夹做了哪些操作?
- 将原先的目录项第一个字节标记成0XE5
- 在剪切后的子目录里生成一个目录项
发布评论