linux中生成考核用的NTFS文件系统结构样例

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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文件系统结构样例的主要内容,如果未能解决你的问题,请参考以下文章

linux中生成考核用的NTFS文件系统结构样例

linux中生成考核用的NTFS文件系统结构样例

linux中生成考核用的FAT32文件系统结构样例

linux中生成考核用的NTFS文件系统

linux中生成考核用的FAT32文件系统结构样例

linux中生成考核用的GPT分区表结构修复案例