首页 > 代码库 > linux中生成考核用的NTFS文件系统

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

#第一段for,先创建30个子目录,每个目录下80-100个文件,大小为16K-48K,这一段基本连续
for((i=1;i<=30;i++));do
 mkdir /mnt/$i
 r1=$(($RANDOM % 20))
 for((ii=1;ii<80+$r1;ii++));do
  r2=$(($RANDOM % 8 + 4))
  dd if=/dev/urandom of=/mnt/$i/$ii bs=4096 count=$r2
 done
done

#sleep 60 便于让文件系统flush
sleep 60

#第二段for,使用dd把第一段for创建出的文件,从0-16K的位置,写入48K-80K,基本保证约2个碎片
for((i=1;i<=30;i++));do
 cd /mnt/$i
 r2=$(($RANDOM % 8 + 12))
 r3=$(($RANDOM % 4))
 for ii in `ls`;do
  r2=$(($RANDOM % 8 + 12))
  dd if=/dev/urandom of=/mnt/$i/$ii bs=4096 seek=$r3 count=$r2
 done
done

#填充65000个文件,这样可以使NTFS $MFT填充到第一个使用的数据区段,从而产生$MFT 碎片。
for((i=1;i<65000;i++));do
 touch $i
done

#后面两段for,作用同第一、第二段for,不出意外,这些文件的文件系统将写入$mft的第二个片断,更具备人为跟踪的知识全面性考察。
for((i=31;i<=90;i++));do
 mkdir /mnt/$i
 r1=$(($RANDOM % 20))
 for((ii=1;ii<80+$r1;ii++));do
  r2=$(($RANDOM % 8 + 4))
  dd if=/dev/urandom of=/mnt/$i/$ii bs=4096 count=$r2
 done
done
sleep 60
for((i=31;i<=90;i++));do
 cd /mnt/$i
 r2=$(($RANDOM % 8 + 12))
 r3=$(($RANDOM % 4))
 for ii in `ls`;do
  r2=$(($RANDOM % 8 + 12))
  dd if=/dev/urandom of=/mnt/$i/$ii bs=4096 seek=$r3 count=$r2
 done
done
#删除padding,以免目录结构太臃肿
rm -rf /mnt/padding


2、在shell中执行如下命令:

qemu-img create -f raw test2.img 1G
qemu-nbd -f raw -c /dev/nbd0 test2.img
fdisk /dev/nbd0  #此命令交互,目的为/dev/nbd0分个区,不想交互,可使用parted加参数
mkfs.ntfs -f /dev/nbd0p1
mount.ntfs-3g /dev/nbd0p1 /mnt
/bin/bash run.sh

3、测试结果是否满意:

命令一:ntfscluster -f -I 0 /dev/nbd0p1

结果与预想相符,$mft果然为2个片断:

Forced to continue.

Dump: /$MFT

    0x10 - resident

    0x30 - resident

    0x80 - non-resident

             VCN     LCN     Length

               0        4    16387

           16387    20488     1880

    0xb0 - non-resident

             VCN     LCN     Length

               0        2        2

               2    16391        1



命令二:ntfscluster -f -F 1/ /dev/nbd0p1

结果与预想相符,抽样目录,也为2个片断

Forced to continue.

Unnormalized path 1/

Dump: /1

    0x10 - resident

    0x30 - resident

    0x50 - resident

    0x90 - resident

    0xa0 - non-resident

             VCN     LCN     Length

               0    53328        2

               2    49238        1

    0xb0 - resident



命令三:
ntfscluster -f -F 60/9 /dev/nbd0p1

结果与预想相符,抽样文件,也为2个片断

Forced to continue.

Dump: /60/9

    0x10 - resident

    0x30 - resident

    0x50 - resident

    0x80 - non-resident

             VCN     LCN     Length

               0   211991        8

               8   115298        7


4、生成所有文件的md5 哈希,便于生成考核答案

cd /mnt
find . -type f -print|xargs md5sum -b |tr a-z A-Z


5、生成所有文件的碎片信息,便于生成考核答案

cd /mnt
for i in `find . -type f`;do ntfscluster -f -F $i /dev/nbd0p1;done 2>/dev/null


6、生成目录的碎片信息,便于生成考核答案

cd /mnt
for i in `find . -type d`;do ntfscluster -f -F $i /dev/nbd0p1;done 2>/dev/null


7、生成元文件的文件记录信息,便于生成考核答案

for((i=0;i<16;i++));do ntfscluster -f -I $i /dev/nbd0p1;done 2>/dev/null

    或者通过命令:ntfscluster -i -f /dev/nbd0p1,

    查看如下值:initialized mft records : 73115

    再执行,下面命令即可将所有文件的碎片信息打印出来,再做加工,即可生成考核答案

for((i=0;i<73115;i++));do ntfscluster -f -I $i /dev/nbd0p1;done 2>/dev/null



考题及答案生成部分:

1、$MFT:$DATA

2、$MFT:$BITMAP

3、在$MFT第一个片断中的,拥有$DATA:RUNLIST唯一一条记录的文件,回答其MD5

4、在$MFT第二个片断中的,拥有$DATA:RUNLIST两条记录的文件,回答其MD5

5、读取某个拥有至少2个A0属性的目录块的MD5

6、给定一个起始簇号,解释一个RUNLIST的前3条记录(样本中至少有3条记录)

7、恢复一个删除的文件 (可生成答案后,删除某个目录,再恢复其下面的某个文件即可)

本文出自 “张宇(数据恢复)” 博客,请务必保留此出处http://zhangyu.blog.51cto.com/197148/1911271

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