首页 > 代码库 > linux中生成考核用的FAT32文件系统结构样例(二)

linux中生成考核用的FAT32文件系统结构样例(二)

实验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、实验FAT32-2中,对镜像文件fat32-2-8.img中损坏的DBR进行修正,如果以FAT表数为2修复,则修复后DBR的MD5 HASH是___,  如果以FAT表数为1,则修复后DBR的MD5 HASH是___。////3ECB03CC3C8F3D3ED6DC4D502F1ADB31//78036840280382773A7F3C564A21A3F0//容易。。

2、实验FAT32-2中,对镜像文件fat32-2-9.img中损坏的DBR进行修正,如果以FAT表数为2修复,则修复后DBR的MD5 HASH是___,  如果以FAT表数为1,则修复后DBR的MD5 HASH是___。////30EA11DED5DA720351B8EA40603A2880//C9F6D77E941423A0900FEDDC11E43999//容易。。

... ...



附:实验环境生成脚本(python3):

#!/usr/bin/python3
import os
import random
import hashlib
import struct

r=os.system
rc=random.choice
ri=random.randint
md5=hashlib.md5

sdata=http://www.mamicode.com/[8,16,32,64]"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、脚本编译运行后的结果如下:

root@zhangyu-VirtualBox:~/FAT32-2# ls

fat32-2-100.dbr     fat32-2-19.tar.gz  fat32-2-29.dbr     fat32-2-38.tar.gz  fat32-2-48.dbr     fat32-2-57.tar.gz  fat32-2-67.dbr     fat32-2-76.tar.gz  fat32-2-86.dbr     fat32-2-95.tar.gz

fat32-2-100.tar.gz  fat32-2-1.dbr      fat32-2-29.tar.gz  fat32-2-39.dbr     fat32-2-48.tar.gz  fat32-2-58.dbr     fat32-2-67.tar.gz  fat32-2-77.dbr     fat32-2-86.tar.gz  fat32-2-96.dbr

fat32-2-10.dbr      fat32-2-1.tar.gz   fat32-2-2.dbr      fat32-2-39.tar.gz  fat32-2-49.dbr     fat32-2-58.tar.gz  fat32-2-68.dbr     fat32-2-77.tar.gz  fat32-2-87.dbr     fat32-2-96.tar.gz

fat32-2-10.tar.gz   fat32-2-20.dbr     fat32-2-2.tar.gz   fat32-2-3.dbr      fat32-2-49.tar.gz  fat32-2-59.dbr     fat32-2-68.tar.gz  fat32-2-78.dbr     fat32-2-87.tar.gz  fat32-2-97.dbr

fat32-2-11.dbr      fat32-2-20.tar.gz  fat32-2-30.dbr     fat32-2-3.tar.gz   fat32-2-4.dbr      fat32-2-59.tar.gz  fat32-2-69.dbr     fat32-2-78.tar.gz  fat32-2-88.dbr     fat32-2-97.tar.gz

fat32-2-11.tar.gz   fat32-2-21.dbr     fat32-2-30.tar.gz  fat32-2-40.dbr     fat32-2-4.tar.gz   fat32-2-5.dbr      fat32-2-69.tar.gz  fat32-2-79.dbr     fat32-2-88.tar.gz  fat32-2-98.dbr

fat32-2-12.dbr      fat32-2-21.tar.gz  fat32-2-31.dbr     fat32-2-40.tar.gz  fat32-2-50.dbr     fat32-2-5.tar.gz   fat32-2-6.dbr      fat32-2-79.tar.gz  fat32-2-89.dbr     fat32-2-98.tar.gz

fat32-2-12.tar.gz   fat32-2-22.dbr     fat32-2-31.tar.gz  fat32-2-41.dbr     fat32-2-50.tar.gz  fat32-2-60.dbr     fat32-2-6.tar.gz   fat32-2-7.dbr      fat32-2-89.tar.gz  fat32-2-99.dbr

fat32-2-13.dbr      fat32-2-22.tar.gz  fat32-2-32.dbr     fat32-2-41.tar.gz  fat32-2-51.dbr     fat32-2-60.tar.gz  fat32-2-70.dbr     fat32-2-7.tar.gz   fat32-2-8.dbr      fat32-2-99.tar.gz

fat32-2-13.tar.gz   fat32-2-23.dbr     fat32-2-32.tar.gz  fat32-2-42.dbr     fat32-2-51.tar.gz  fat32-2-61.dbr     fat32-2-70.tar.gz  fat32-2-80.dbr     fat32-2-8.tar.gz   fat32-2-9.dbr

fat32-2-14.dbr      fat32-2-23.tar.gz  fat32-2-33.dbr     fat32-2-42.tar.gz  fat32-2-52.dbr     fat32-2-61.tar.gz  fat32-2-71.dbr     fat32-2-80.tar.gz  fat32-2-90.dbr     fat32-2-9.tar.gz

fat32-2-14.tar.gz   fat32-2-24.dbr     fat32-2-33.tar.gz  fat32-2-43.dbr     fat32-2-52.tar.gz  fat32-2-62.dbr     fat32-2-71.tar.gz  fat32-2-81.dbr     fat32-2-90.tar.gz  FAT32-2-kaoti.txt

fat32-2-15.dbr      fat32-2-24.tar.gz  fat32-2-34.dbr     fat32-2-43.tar.gz  fat32-2-53.dbr     fat32-2-62.tar.gz  fat32-2-72.dbr     fat32-2-81.tar.gz  fat32-2-91.dbr     run_fat32-2.py

fat32-2-15.tar.gz   fat32-2-25.dbr     fat32-2-34.tar.gz  fat32-2-44.dbr     fat32-2-53.tar.gz  fat32-2-63.dbr     fat32-2-72.tar.gz  fat32-2-82.dbr     fat32-2-91.tar.gz

fat32-2-16.dbr      fat32-2-25.tar.gz  fat32-2-35.dbr     fat32-2-44.tar.gz  fat32-2-54.dbr     fat32-2-63.tar.gz  fat32-2-73.dbr     fat32-2-82.tar.gz  fat32-2-92.dbr

fat32-2-16.tar.gz   fat32-2-26.dbr     fat32-2-35.tar.gz  fat32-2-45.dbr     fat32-2-54.tar.gz  fat32-2-64.dbr     fat32-2-73.tar.gz  fat32-2-83.dbr     fat32-2-92.tar.gz

fat32-2-17.dbr      fat32-2-26.tar.gz  fat32-2-36.dbr     fat32-2-45.tar.gz  fat32-2-55.dbr     fat32-2-64.tar.gz  fat32-2-74.dbr     fat32-2-83.tar.gz  fat32-2-93.dbr

fat32-2-17.tar.gz   fat32-2-27.dbr     fat32-2-36.tar.gz  fat32-2-46.dbr     fat32-2-55.tar.gz  fat32-2-65.dbr     fat32-2-74.tar.gz  fat32-2-84.dbr     fat32-2-93.tar.gz

fat32-2-18.dbr      fat32-2-27.tar.gz  fat32-2-37.dbr     fat32-2-46.tar.gz  fat32-2-56.dbr     fat32-2-65.tar.gz  fat32-2-75.dbr     fat32-2-84.tar.gz  fat32-2-94.dbr

fat32-2-18.tar.gz   fat32-2-28.dbr     fat32-2-37.tar.gz  fat32-2-47.dbr     fat32-2-56.tar.gz  fat32-2-66.dbr     fat32-2-75.tar.gz  fat32-2-85.dbr     fat32-2-94.tar.gz

fat32-2-19.dbr      fat32-2-28.tar.gz  fat32-2-38.dbr     fat32-2-47.tar.gz  fat32-2-57.dbr     fat32-2-66.tar.gz  fat32-2-76.dbr     fat32-2-85.tar.gz  fat32-2-95.dbr

其中,*.tar.gz即考试镜像,FAT32-2-kaoti.txt是生成的考题文件,run_fat32-2.py即上述脚本文件,*.dbr是应该正确的以2份FAT表为例的dbr备份。

2、FAT32-2-kaoti.txt内容如下(仅截取头部):

root@zhangyu-VirtualBox:~/FAT32-2# cat FAT32-2-kaoti.txt 

实验FAT32-2中,对镜像文件fat32-2-1.img中损坏的DBR进行修正,如果以FAT表数为2修复,则修复后DBR的MD5 HASH是___,  如果以FAT表数为1,则修复后DBR的MD5 HASH是___。////1A2201702D2643AFFE88E5BC4A1E9A43//C1E0667248B5A0AE3D153B31F0C9F0C1//。。

实验FAT32-2中,对镜像文件fat32-2-2.img中损坏的DBR进行修正,如果以FAT表数为2修复,则修复后DBR的MD5 HASH是___,  如果以FAT表数为1,则修复后DBR的MD5 HASH是___。////17E1A815B11CACFFAC795A984A196D37//3D2305C18DE78A92E2E173E2E45D07A9//。。


3、考试时,将FAT32-2-kaoti.txt导入考试系统,*.tar.gz文件放到考试目录下即可(参考答案、*.dbr、脚 本等不得放入考试目录下,答案仅用于测试考题正确与否的过程性数据。)。

本文出自 “张宇(数据恢复)” 博客,请务必保留此出处http://zhangyu.blog.51cto.com/197148/1941701

linux中生成考核用的FAT32文件系统结构样例(二)