注:历史版本,后期改用python实现了
实验一:
目的:用于生成大量模拟破坏GPT分区结构案例,并生成唯一方式修复后的评判方法。
故障:在一个完整的GPT分区磁盘上,丢失了GPT主分区表,或备份分区表。
要求:
1、利用WINHEX手工方式,修复给定镜像文件的分区结构。
2、不得对现存主分区表或备份分区表做任何修改。
3、不得使用WINHEX GPT分区模板进行参考修复。
4、修复后生成整个镜像文件的MD5 HASH值。
实验样本生成过程:
#!/bin/sh#删除头部做50个 for((i=1;i<=50;i++));do r1=$(($i+200)) qemu-img create -f raw $i.img "$r1"M losetup /dev/loop0 $i.img parted -s /dev/loop0 mklabel gpt parted -s /dev/loop0 mkpart -s primary ext3 128s 100% dd if=/dev/loop0 2>/dev/null |md5sum -b|tr a-z A-Z 1>>md5.txt dd if=/dev/loop0 of=head"$i".img bs=512 count=64 dd if=/dev/zero of=/dev/loop0 bs=512 seek=1 count=2048 dd if=/dev/loop0 of=f"$i".img tar -zcvf f"$i".tar.gz f"$i".img rm f"$i".img losetup -D rm $i.imgdone#删除尾部做50个for((i=51;i<=100;i++));do r1=$(($i+200)) r2=$(($r1*2048-64)) qemu-img create -f raw $i.img "$r1"M losetup /dev/loop0 $i.img parted -s /dev/loop0 mklabel gpt parted -s /dev/loop0 mkpart -s primary ext3 128s 100% dd if=/dev/loop0 2>/dev/null |md5sum -b|tr a-z A-Z 1>>md5.txt dd if=/dev/loop0 of=tail"$i".img skipk=$r2 bs=512 dd if=/dev/zero of=/dev/loop0 bs=512 seek=$r2 dd if=/dev/loop0 of=f"$i".img tar -zcvf f"$i".tar.gz f"$i".img rm f"$i".img losetup -D rm $i.imgdone
实验二:
目的:用于生成大量模拟破坏GPT分区结构案例,并生成唯一方式修复后的评判方法。
故障:在一个完整的GPT分区磁盘上,之前有一个位置不确定的分区(脚本中起始于100~150M,结束于350~400M),现在被重新分区后变成了一个完整的大分区。
要求:
1、利用WINHEX手工方式,修复给定镜像文件的分区结构。
2、仅在现有分区表项上做修改,仅修改其起始位置,结束位置。
3、不得使用WINHEX GPT分区模板进行参考修复。
4、修复后生成整个镜像文件的MD5 HASH值。
实验样本生成过程:
#!/bin/bashfor((i=1;i<=100;i++));do r1=$(($RANDOM % 50+100)) r2=$(($RANDOM % 50+350)) qemu-img create -f raw $i.img 500M losetup /dev/loop0 $i.img parted -s /dev/loop0 mklabel gpt parted -s /dev/loop0 mkpart -s primary ext3 "$r1"M "$r2"M mkfs.ntfs -f /dev/loop0p1 dd if=/dev/loop0 2>/dev/null| md5sum -b|tr a-z A-Z 1>>md5.txt dd if=/dev/loop0 2>/dev/null| gzip >s"$i".gz parted -s /dev/loop0 rm 1 parted -s /dev/loop0 mkpart -s primary ext3 128s 100% dd if=/dev/loop0 2>/dev/null |gzip >"$i".gz losetup -D rm $i.imgdone