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是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):

#!/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、不得将用于考试的直接涉及答案的文件放入考试系统磁盘中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值