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、不得将用于考试的直接涉及答案的文件放入考试系统磁盘中。

时间: 06-25

linux中生成考核用的NTFS文件系统结构样例(三)的相关文章

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

实验NTFS-2说明:NTFS-2.img是一个包含NTFS文件系统的磁盘镜像,请使用winhex手工方式读出这个文件系统内的指定文件,并回答其md5 HASH值. 要求: 1.利用WINHEX手工方式读取. 2.不得使用WINHEX模板功能. 3.不得使用WINHEX文件系统解析功能. 4.填写的MD5 HASH值全部为大写,不包括0x头标或H尾标,中间不得有任何间隔符号(包括空格.制表符.'-'等符号),以WINHEX软件运算出的HASH值为准. 实验目的: 1.实现手工方式跟踪一个NTFS

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

实验NTFS-1说明:NTFS-1.img是一个包含NTFS文件系统的磁盘镜像,请使用winhex手工方式读出这个文件系统内的指定文件,并回答其md5 HASH值. 要求: 1.利用WINHEX手工方式读取. 2.不得使用WINHEX模板功能. 3.不得使用WINHEX文件系统解析功能. 4.填写的MD5 HASH值全部为大写,不包括0x头标或H尾标,中间不得有任何间隔符号(包括空格.制表符.'-'等符号),以WINHEX软件运算出的HASH值为准. 实验目的: 1.实现手工方式跟踪一个NTFS

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

实验X说明:FAT32-1.img是一个包含FAT32文件系统的磁盘镜像,请使用winhex手工方式读出这个文件系统内的指定文件,并回答其md5 HASH值. 要求: 1.利用WINHEX手工方式读取. 2.不得使用WINHEX模板功能. 3.不得使用WINHEX文件系统解析功能. 4.填写的MD5 HASH值全部为大写,不包括0x头标或H尾标,中间不得有任何间隔符号(包括空格.制表符.'-'等符号),以WINHEX软件运算出的HASH值为准. 实验目的: 1.实现手工方式跟踪一个FAT32文件

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

实验FAT32-2说明:FAT32-2\目录下的xxx.tar.gz解压后是一个FAT32文件系统的分区镜像,其DBR及备份的一些参数错误,请使用winhex手工方式修复DBR,并回答修改后的DBR的md5 HASH值. 要求: 1.利用WINHEX手工方式读取. 2.不得使用WINHEX模板功能. 3.不得使用WINHEX文件系统解析功能. 4.出错部分仅为DBR保留扇区.FAT表份数.FAT表大小.文件系统扇区总数.每簇扇区数.有效结束标志,其余部分不得修改. 5.文件系统扇区总数为可利用的

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

目的: 生成一个NTFS文件系统,要求: 1.$MFT至少2个碎片 2.根目录下建90个以从1开始的数字编号为名的子目录,每个子目录下建80-100个文件,文件编号从1开始编起. 3.有大量文件是由2个或以上碎片组成.(本例多为2个碎片) 1.shell 脚本如下: #!/bin/sh #   # #  Created by www.frombyte.com    张宇 on 2017/3/29.脚本可能有更新,见附件 # mkdir /mnt/padding cd /mnt/padding #

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

目的:用于生成大量模拟破坏GPT分区结构案例,并生成唯一方式修复后的评判方法. 故障:在一个完整的GPT分区磁盘上,丢失了GPT主分区表,或备份分区表. 要求: 1.利用WINHEX手工方式,修复给定镜像文件的分区结构. 2.不得对现存主分区表或备份分区表做任何修改. 3.不得使用WINHEX GPT分区模板进行参考修复. 4.修复后生成整个镜像文件的MD5 HASH值. 实验样本生成过程: #!/bin/sh #删除头部做50个  for((i=1;i<=50;i++));do  r1=$((

Linux中生成密钥的两种方法

Linux中生成密钥的两种方法 SSH服务支持一种安全认证机制,即密钥认证.所谓的密钥认证,实际上是使用一对加密字符串,一个称为公钥(publickey), 任何人都可以看到其内容,用于加密:另一个称为密钥(privatekey),只有拥有者才能看到,用于解密.通过公钥加密过的密文使用密钥可以轻松解密,但根据公钥来猜测密钥却十分困难. ssh的密钥认证就是使用了这一特性.服务器和客户端都各自拥有自己的公钥和密钥.如何使用密钥认证登录linux服务器呢? 在使用密钥认证远程登入linux之前,我们

Linux中在当前目录下查找某个文件

ZT:https://zhidao.baidu.com/question/1512088073851955780.html Linux中在当前目录下查找某个文件可以使用find命令. 1.比如在/usr/lib下查找klibc的文件,进入/usr/lib目录后,可以执行 find . -name "klibc" 说明:find命令用于查找文件,后面的"."代表当前目录,-name是find命令的参数,后面接要搜索的文件名. 2.如果不明确文件名称,可以使用通配符 f

linux中的strip命令简介------给文件脱衣服

转载于:http://blog.csdn.net/stpeace/article/details/47090255 作为一名linux开发人员, 如果没有听说过strip命令, 那是很不应该的. strip这个单词, 大家应该早就学过了, 你就记住是脱衣服就行了, 别的不要多想. 在linux中, strip也有脱衣服的含义, 具体就是从特定文件中剥掉一些符号信息和调试信息. 我们来看main.c文件: [cpp] view plain copy print? #include <stdio.h