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文件系统结构样例的主要内容,如果未能解决你的问题,请参考以下文章