第一部分:面向被考覈者
實驗說明:
已知有大小約500M-600M之間的某個磁盤鏡像,之前使用GPT分區方式劃分了一個分區,格式化爲NTFS文件系統,分區起始位置和大小不確定。現在故障爲:原來的分區被刪除,新建了一個大分區,請找出刪除的分區,在現有分區表項的基礎上改出刪除的分區,完成修復工作後,按要求回答問題。
實驗要求:
1、利用WINHEX手工方式,修改給定鏡像文件的分區結構。
2、分區表部分,只能修改現存分區表項的起始位置、結束位置,其餘部分不得做任何修改。
3、修正分區表頭校驗。
4、修正分區表備份區域。
5、不得使用WINHEX GPT分區模板進行參考修復。
6、除GPT分區表頭、GPT分區表、GPT分區表頭備份、GPT分區表備份外,鏡像文件的其餘部分不得修改。
7、修復後生成整個鏡像文件的MD5 HASH值。填寫的MD5 HASH值全部爲大寫,不包括0x頭標或H尾標,中間不得有任何間隔符號(包括空格、製表符、’-’等符號),以WINHEX軟件運算出的HASH值爲準。
實驗要求:
考試爲閉卷形式,不得參考除本材料以外的其他材料;不得使用電腦連接互聯網查詢信息;考試時間爲30分鐘;
實驗目的:
1、掌握GPT分區結構,掌握GPT分區校驗。
2、掌握分區表與備份分區表的區別與關聯。
3、熟練使用WINHEX的相關功能。
題庫(示例):
1、實驗GPT-2,試卷A,對於GPT2_A_79.tar.gz解壓後的鏡像文件,找到丟失分區、 修改GPT分區結構後整個文件MD5 HASH值爲0x___。 //A9D25AB7C8BE78D7384E1DEA6C626BFE//容易。。 2、實驗GPT-2,試卷A,對於GPT2_A_80.tar.gz解壓後的鏡像文件,找到丟失分區、 修改GPT分區結構後整個文件MD5 HASH值爲0x___。 //42F861DE3E683EE7CAE68DD600F04CCF//容易。。 ......
第二部分:出題過程歸檔
生成題庫過程:
創建python腳本,生成考題
#!/usr/bin/python3 import os import sys import random import hashlib import struct import zlib def help_exit(): print(" 命令格式:") print(" python3 %s <NUM>:" % sys.argv[0]) print(" NUM:只可以填寫\"A-F\",表示試卷A、試卷B的意思。\n") exit() #通過拋出異常判斷第一個參數是否是A-F def is_num_by_except(s): try: a=int(s,16) if (a>0 and a<=16): return True else: return False except ValueError: return False if len(sys.argv)!=2 : print(" ***參數數量或格式錯誤!") help_exit() s=sys.argv[1].upper() if is_num_by_except(s): print("****正在生成試卷%s材料及答案****"%s) else: print(" ***參數數量或格式錯誤!") help_exit() r=os.system rc=random.choice ri=random.randint zero=bytearray(128*128+512) fkaoti = open("GPT2-%s_kaoti.txt"%s,'w+') fs = open("GPT2-%s_source.img"%s,'wb+') r("cd ~/GPT2") for i in range(1,101): fd = "GPT2_%s_%d.img"%(s,i) r("qemu-img create -f raw %s %dM" % (fd,ri(500,600))) r("losetup /dev/loop0 %s"%fd) r("parted -s /dev/loop0 mklabel gpt") r("parted -s /dev/loop0 mkpart -s primary ntfs %dM %dM"% (ri(100,150),ri(350,500))) r("mkfs.ntfs -f /dev/loop0p1") r("losetup -d /dev/loop0") #生成MD5 hash f=open(fd,'rb+') md5=hashlib.md5() while True: b = f.read(8096) if not b : break md5.update(b) f.seek(512) d1=f.read(512) #GPT分區表頭 d2=f.read(128*128) #GPT分區表區域 pad11,crc1,pad12,headpoi,headbakpoi,pad13,depoi,pad14,ptpoi,pad15,crc2,pad16\ = struct.unpack('<16sI4sQQ8sQ16sQ8sI420s',d1) pad21,pspoi,pepoi,pad22 \ = struct.unpack('<32sQQ%ds'%(128*128-48),d2) d2m = struct.pack('<32sQQ%ds'%(128*128-48),pad21,128,depoi,pad22) crc2m = zlib.crc32(d2m) d1t = struct.pack('<16sI4sQQ8sQ16sQ8sI',\ pad11,0,pad12,headpoi,headbakpoi,pad13,depoi,pad14,ptpoi,pad15,crc2m) crc1m = zlib.crc32(d1t) d1m = struct.pack('<16sI4sQQ8sQ16sQ8sI420s',\ pad11,crc1m,pad12,headpoi,headbakpoi,pad13,depoi,pad14,ptpoi,pad15,crc2m,pad16) f.seek(512) f.write(d1m) f.write(d2m) #中間數據:備份一下分區表尾,參考答案 f.seek(headbakpoi*512 - 32*512) d3=f.read(512 + 128*128) #再處理分區表備份扇區 d1t = struct.pack('<16sI4sQQ8sQ16sQ8sI',\ pad11,0,pad12,headbakpoi,headpoi,pad13,depoi,pad14,headbakpoi-32,pad15,crc2m) crc1m = zlib.crc32(d1t) d1m = struct.pack('<16sI4sQQ8sQ16sQ8sI420s',\ pad11,crc1m,pad12,headbakpoi,headpoi,pad13,depoi,pad14,headbakpoi-32,pad15,crc2m,pad16) f.seek(headbakpoi*512 - 32*512) f.write(d2m) f.write(d1m) f.close() r("tar -zcf %s.tar.gz %s"%(fd[:-4],fd)) os.remove(fd) fkaoti.write("實驗GPT-2,試卷%s,對於%s.tar.gz解壓後的鏡像文件,找到丟失分區、修改GPT\ 分區結構後整個文件MD5 HASH值爲0x___。//%s//容易。。\n" \ % (s, fd[:-4], md5.hexdigest().upper() ) ) fkaoti.flush() fs.write(d1) fs.write(d2) fs.write(d3) fs.flush() fkaoti.close() fs.close()
部署流程:
1、在liunx下執行上述腳本,命令格式爲:
python3 run_GPT2.py A
其中第二個參數是腳本名稱,第三個參數用於區分哪套試卷。
2、把GPT-x_kaoti.txt導入考試系統。鏡像文件按要求放到考試機器上。
3、不得將用於考試的直接涉及答案的文件、以及生成考題的腳本放入考試系統磁盤中。