linux中生成考核用的NTFS文件系統結構樣例(三)
實驗NTFS-3說明:
NTFS-3\目錄下的xxx.tar.gz解壓後是一個包括NTFS文件系統的磁盤鏡像。現在已知的情況是:
1、硬盤之前使用MBR分區方式分了唯一這個NTFS文件系統的分區(無擴展分區);
2、MBR區域及DBR區域被清0,分區起始位置不確定;
3、NTFS DBR備份中一些重要的參數被破壞,其余區域無破壞;
請按如下要求回答問題。
要求:
請使用winhex手工方式修復DBR,並回答修改後的DBR扇區的md5 HASH值。
1、利用WINHEX手工方式讀取。
2、不得使用WINHEX模板功能。
3、不得使用WINHEX文件系統解析功能。
4、NTFS DBR結構中,請修正:分區扇區總數、每簇扇區數、$MFT位置、$MFTMirr位置、每文件記錄占用的簇數量。其余部分均未出錯,需保持原樣。
5、DBR中描述的NTFS文件系統大小,表述範圍為DBR扇區到"DBR 備份扇區的前一個扇區"之間,不包括DBR備份扇區。
6、填寫的MD5 HASH值全部為大寫,不包括0x頭標或H尾標,中間不得有任何間隔符號(包括空格、制表符、’-’等符號),以WINHEX軟件運算出的HASH值為準。
實驗目的:
1、理解NTFS DBR的結構。
2、理解NTFS文件系統整體結構。
3、學會如何通過數據區分析文件系統參數。
4、熟練使用WINHEX
題庫(示例):
1、實驗NTFS-3中,針對鏡像文件NTFS-3-1.img,根據已有信息分析,DBR的扇區位置應為___ (十進制數字表示)。修正其DBR後的MD5 HASH值是0x___。(僅計算DBR HASH) //995#26665A42E0DC3AD0894170D9A1CC2084//容易。。 2、實驗NTFS-3中,針對鏡像文件NTFS-3-2.img,根據已有信息分析,DBR的扇區位置應為___ (十進制數字表示)。修正其DBR後的MD5 HASH值是0x___。(僅計算DBR HASH) //435#37EC25FAEAA44D46B386CEE3FCD71ECA//容易。。 ......
生成題庫過程:
第一步:
修改ntfs-3g源碼、編譯、安裝,以實現$MFT,$MFTMIRR文件的隨機位置:
#下載ntfs-3g源碼 wget https://tuxera.com/opensource/ntfs-3g_ntfsprogs-2017.3.23.tgz #解壓源碼 tar -zxf ntfs-3g_ntfsprogs-2017.3.23.tgz #| 編輯文件,修改如下: #| 第3941行附近,在 #| g_mft_lcn = g_rl_mft_bmp[0].lcn + g_rl_mft_bmp[0].length; #| 行後,添加: #| srandom(sle64_to_cpu(mkntfs_time())/10000000); #| g_mft_lcn += ((u16)random() & 0xFF); #| 第3990行附近(算上前面已經增加的兩行),在 #| g_mftmirr_lcn = (opts.num_sectors * opts.sector_size >> 1) #| / g_vol->cluster_size; #| 行後,添加: #| g_mftmirr_lcn += ((u16)random() & 0xF); vim ntfs-3g_ntfsprogs-2017.3.23/ntfsprogs/mkntfs.c #編譯代碼、安裝模塊 cd ntfs-3g_ntfsprogs-2017.3.23 ./configure make make install #安裝後,如不生效,可以which mkntfs後找到位置,刪除,重新make install,或重新登陸shell。 #測試命令(下述命令可以連起來執行,以便觀察統計): # mkntfs -f -c 1024 /dev/loop0; # ntfscluster /dev/loop0; # ntfsinfo -m /dev/loop0 ; # ntfscluster -I 1 /dev/loop0 # 觀察每次格式化後,MFT Zone Position: 值是不是改變;觀察最後一行$MFTMIrr的LCN是不是改變即可。
第二步:
創建python腳本,生成測試樣本及考題
#!/usr/bin/python3 import os import random import hashlib import struct r=os.system rc=random.choice ri=random.randint md5=hashlib.md5 CluSize=[512,1024,2048,4096,8192,16384] r("cd ~/NTFS-3") r("ls") fkaoti = open("NTFS-3-kaoti.txt",‘w+‘) zeroblock = bytearray(512) for i in range(1,101): fd = ("NTFS-3-%d.img" % i) diskKBs=ri(300*1024,500*1024) r("qemu-img create -f raw %s %dK" % (fd,diskKBs)) r("losetup /dev/loop0 %s" % fd) r("parted -s /dev/loop0 mklabel msdos") ss = ri(100,1000) r("parted -s /dev/loop0 mkpart -s primary fat32 %ds %d%%"% (ss,ri(90,99)) ) r("mkfs.ntfs -f -c %d /dev/loop0p1" % rc(CluSize) ) r("mount.ntfs-3g /dev/loop0p1 /mnt") #100 dirs for ii in range(1,100): dir1=ri(100,999999) r("mkdir /mnt/%d" % dir1) for iii in range(1,20): file1=ri(1000000,9999999999) r("dd if=/dev/zero of=/mnt/%d/%d.file seek=%d count=1 bs=4096 2>/dev/null" % (dir1,file1,ri(16,50)) ) r("umount /dev/loop0p1") r("losetup -d /dev/loop0") r("cd ~/NTFS-3") #計算生成HASH f = open("%s" % fd,‘rb+‘) f.seek(ss * 512) dbr = f.read(512) pPad1,pSecSize,pCluSecs,pPad2,pHiddenSecs,pPad3,pTotalSecs, pMftCluNo,pMftmirrCluNo,pCluPerFR,pPad4,pSign = struct.unpack(‘<11sHB14sI8sQQQB445sH‘,dbr) dbrMD5 = md5(dbr) f_dbr = open("%s.dbr" % fd[:-4],‘wb+‘) f_dbr.write(dbr) f_dbr.close() badDBR=struct.pack(‘<11sHB14sI8sQQQB445sH‘,pPad1,pSecSize, 0,pPad2,pHiddenSecs,pPad3,0, 0,0,0,pPad4,pSign) f.seek( ss * 512 + pTotalSecs * 512) f.write(badDBR) f.seek(0) for it in range(0,ss+1): f.write(zeroblock) f.close() fkaoti.write("實驗NTFS-3中,針對鏡像文件%s,根據已有信息分析, DBR的扇區位置應為___(十進制數字表示)。修正其DBR後的MD5 HASH值是0x___。 (僅計算DBR HASH)//%d#%s//容易。。\n" % ( fd,ss,dbrMD5.hexdigest().upper() ) ) fkaoti.flush() r("tar -zcf %s.tar.gz %s" % (fd[:-4],fd)) r("rm %s" % fd) fkaoti.close()
部署流程:
1、在liunx下執行上述腳本,生成NTFS-3.img和NTFS-3-kaoti.txt(可以生成兩份,一份用於練習,一份用於考試)。其中,*.tar.gz即考試鏡像,NTFS-3-kaoti.txt是生成的考題文件,run_NTFS-3.py即上述腳本文件,*.dbr是正確的dbr備份。
2、針對每一份考題,把NTFS-3-kaoti.txt導入考試系統。
3、針對每一份考題,把所有的NTFS-3-xxx.tar.gz放入考試系統指定目錄。
4、不得將用於考試的直接涉及答案的文件放入考試系統磁盤中。
本文出自 “張宇(數據恢復)” 博客,請務必保留此出處http://zhangyu.blog.51cto.com/197148/1942226
linux中生成考核用的NTFS文件系統結構樣例(三)