您的位置:首页 > 运维架构 > Linux

linux中生成考核用的GPT分区结构样例(二)

2017-06-29 17:23 323 查看
第一部分:面向被考核者
实验说明:
已知有大小约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、不得将用于考试的直接涉及答案的文件、以及生成考题的脚本放入考试系统磁盘中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux 数据恢复 ntfs