第一部分:面向被考核者
实验说明:
已知有大小约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:" % 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、不得将用于考试的直接涉及答案的文件、以及生成考题的脚本放入考试系统磁盘中。