第一部分:面向被考核者

实验说明:

        已知有大小约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/python3import osimport sysimport randomimport hashlibimport structimport zlibdef help_exit():    print("  命令格式:")    print("  python3 %s 
:" % sys.argv[0])    print("      NUM:只可以填写\"A-F\",表示试卷A、试卷B的意思。\n")    exit()#通过抛出异常判断第一个参数是否是A-Fdef 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.systemrc=random.choiceri=random.randintzero=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、不得将用于考试的直接涉及答案的文件、以及生成考题的脚本放入考试系统磁盘中。