实验FAT32-2说明:FAT32-2\目录下的xxx.tar.gz解压后是一个FAT32文件系统的分区镜像,其DBR及备份的一些参数错误,请使用winhex手工方式修复DBR,并回答修改后的DBR的md5 HASH值。
要求:
1、利用WINHEX手工方式读取。
2、不得使用WINHEX模板功能。
3、不得使用WINHEX文件系统解析功能。
4、出错部分仅为DBR保留扇区、FAT表份数、FAT表大小、文件系统扇区总数、每簇扇区数、有效结束标志,其余部分不得修改。
5、文件系统扇区总数为可利用的最大值,即整个镜像文件的扇区总数。
6、填写的MD5 HASH值全部为大写,不包括0x头标或H尾标,中间不得有任何间隔符号(包括空格、制表符、’-’等符号),以WINHEX软件运算出的HASH值为准。
实验目的:
1、理解FAT32 DBR的结构。
2、理解FAT32结构之间的组合关系。
3、学会如何通过数据区分析文件系统参数。
4、熟练使用WINHEX
题库(示例):
1
2
3
4
5
6
7
8
9
|
1、实验FAT32-2中,对镜像文件fat32-2-8.img中损坏的DBR进行修正,
如果以FAT表数为2修复,则修复后DBR的MD5 HASH是0x___,
如果以FAT表数为1,则修复后DBR的MD5 HASH是0x___。
//3ECB03CC3C8F3D3ED6DC4D502F1ADB31#78036840280382773A7F3C564A21A3F0//容易。。
2、实验FAT32-2中,对镜像文件fat32-2-9.img中损坏的DBR进行修正,
如果以FAT表数为2修复,则修复后DBR的MD5 HASH是0x___,
如果以FAT表数为1,则修复后DBR的MD5 HASH是0x___。
//30EA11DED5DA720351B8EA40603A2880#C9F6D77E941423A0900FEDDC11E43999//容易。。
... ...
|
附:实验环境生成脚本(python3):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
#!/usr/bin/python3
import
os
import
random
import
hashlib
import
struct
r
=
os.system
rc
=
random.choice
ri
=
random.randint
md5
=
hashlib.md5
sdata
=
[
8
,
16
,
32
,
64
]
#val = r("ls ~")
#print("val")
r(
"cd ~/FAT32-2"
)
r(
"ls"
)
fkaoti
=
open
(
"FAT32-2-kaoti.txt"
,
'w+'
)
for
i
in
range
(
1
,
101
):
fd
=
(
"fat32-2-%d.img"
%
i)
r(
"qemu-img create -f raw %s %dM"
%
(fd,ri(
10
,
200
)
+
400
))
r(
"losetup /dev/loop0 %s"
%
fd)
r(
"mkfs.fat -F 32 -s %d -R %d /dev/loop0"
%
(rc(sdata),ri(
8
,
128
)) )
r(
"mount /dev/loop0 /mnt"
)
#100 dirs
for
ii
in
range
(
1
,
100
):
dir1
=
ri(
100
,
999999
)
r(
"mkdir /mnt/%d"
%
dir1)
filenum
=
ri(
10
,
100
)
for
iii
in
range
(
1
,filenum):
file1
=
ri(
1000000
,
9999999999
)
r(
"dd if=/dev/zero of=/mnt/%d/%d.txt seek=%d count=1 bs=512 2>/dev/null"
%
(dir1,file1,ri(
8
,
16
)) )
r(
"umount /dev/loop0"
)
r(
"losetup -d /dev/loop0"
)
r(
"cd ~/FAT32-1"
)
#计算以两份FAT表为例的DBR HASH,用于保存答案
f
=
open
(
"%s"
%
fd,
'rb+'
)
dbr
=
f.read(
512
)
pad1,SecPerClus,ResevSecs,Fats,pad2,Sectors,SecPerFat,pad3,Sign
=
struct.unpack(
'<13sBHB15sII470sH'
,dbr)
dbrMD5
=
md5(dbr)
Fats_t
=
1
ResevSecs_t
=
SecPerFat
+
ResevSecs
dbr_1
=
struct.pack(
'<13sBHB15sII470sH'
,pad1,SecPerClus,ResevSecs_t,Fats_t,pad2,Sectors,SecPerFat,pad3,Sign)
dbrMD5_1
=
md5(dbr_1)
dbr_zero
=
struct.pack(
'<13sBHB15sII470sH'
,pad1,
0
,
0
,
0
,pad2,
0
,
0
,pad3,
0
)
f.seek(
0
)
f.write(dbr_zero)
f.seek(
6
*
512
)
f.write(dbr_zero)
f.close()
fkaoti.write("实验FAT32
-
2
中,对镜像文件
%
s中损坏的DBR进行修正,如果以FAT表数为
2
修复,则修复后DBR的MD5
HASH
是
0x___
,\
如果以FAT表数为
1
,则修复后DBR的MD5
HASH
是
0x___
。
/
/
%
s
#%s//容易。。\n"\
%
(fd,dbrMD5.hexdigest().upper(),dbrMD5_1.hexdigest().upper()))
fkaoti.flush()
r(
"tar -zcf %s.tar.gz %s"
%
(fd[:
-
4
],fd))
r(
"rm %s"
%
fd)
f_dbr
=
open
(
"%s.dbr"
%
fd[:
-
4
],
'wb+'
)
f_dbr.write(dbr)
f_dbr.close()
fkaoti.close()
|
部署流程:
1、在liunx下执行上述脚本,生成FAT32-2.img和FAT32-2-kaoti.txt(可以生成两份,一份用于练习,一份用于考试)。其中,*.tar.gz即考试镜像,FAT32-2-kaoti.txt是生成的考题文件,run_fat32-2.py即上述脚本文件,*.dbr是应该正确的以2份FAT表为例的dbr备份。
2、针对每一份考题,把FAT32-2-kaoti.txt导入考试系统。
3、针对每一份考题,把FAT32-2.img放入考试系统指定目录。
4、不得将用于考试的直接涉及答案的文件放入考试系统磁盘中。