實驗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、不得將用於考試的直接涉及答案的文件放入考試系統磁盤中。