1. 程式人生 > >linux中生成考核用的NTFS文件系統結構樣例(三)

linux中生成考核用的NTFS文件系統結構樣例(三)

數據恢復 ntfs dbr mft

實驗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文件系統結構樣例(三)