第一部分:面向被考核者
實驗說明:
已知有大小約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、不得將用於考試的直接涉及答案的檔案、以及生成考題的指令碼放入考試系統磁碟中。
linux中生成考核用的GPT分割槽表結構修復案例
注 歷史版本,後期改用python實現了 實驗一 目的 用於生成大量模擬破壞gpt分割槽結構案例,並生成唯一方式修復後的評判方法。故障 在乙個完整的gpt分割槽磁碟上,丟失了gpt主分割槽表,或備份分割槽表。要求 1 利用winhex手工方式,修復給定映象檔案的分割槽結構。2 不得對現存主分割槽表或...
linux中生成任意大小的檔案
可以利用dd命令 root localhost test dd if dev zero of data.txt bs 1m count 2 2 0 records in 2 0 records out 2097152 bytes 2.1 mb copied,0.0140437 seconds,149...
sap中生成BAPI的ALE介面
t code bdbg 生成bapi的ale介面 物件 介面型別 介面組,可能通過swo1生成。方法 bapi 生成 bapi 的 ale 介面 資訊型別 z getgritem we81 z getgritem 已生成 idoc 型別 z getgritem01 we30 檢查基本型別 z get...