Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Безопасное удаление файлов |

13.02.2007, 13:37
|
|
ы
Регистрация: 11.02.2007
Сообщений: 750
Провел на форуме: 1347723
Репутация:
1477
|
|
Безопасное удаление файлов
Вот от нечего делать наколбасил скрипт на bash о назначение которого можно узнать из комментариев. Собственно скрипт имеет "ограниченную" пригодность ввиду скорости выполнения (Опять же читаем комантарии), однако представяет собой интерес в виде примера использования. Представляю на суд общественности, приветствуются советы по улучшению скорости, качества и т.п Короче, обсуждаем.
Код:
#!/bin/bash
hell=(
' shred.sh: wiper by ShadOS [Hell Knights Crew]\n'
'//-------------------------------------------\n'
' The Mainest Evil of Runet \n'
' _ _ _ _ _ __ _ _ _ \n'
' | || |___| | | |/ /_ _ (_)__ _| |_| |_ ___ \n'
' | __ / -_) | | . <| . \| / _. | . \ _(_-< \n'
' |_||_\___|_|_|_|\_\_||_|_\__. |_||_\__/__/ \n'
' hellknights.void.ru |___/ .0x48k. \n'
' shados.0x48k.cc .ShadOS. \n'
'//-------------------------------------------\n'
)
# Этот сценарий записывает случайные данные в заданный файл,
#+ затем записывает туда нули и наконец удаляет файл.
# После такого удаления даже анализ дисковых секторов
#+ не даст ровным счетом ничего.
# Это довольно надежный, хотя и достаточно медленный способ уничтожения файлов.
#+ Более эффективно это делает команда "shred",
#+ входящая в состав пакета GNU "fileutils".
#Далее привожу выдержку из man shred из состава GNU "fileutils"
#ВНИМАНИЕ: Помните, что shred полагается на очень важное предположение:
#что ваша файловая система перезаписывает файлы "на месте".
#Традиционно это так и делается, но многие современные файловые системы
#не удовлетворяют этому предположению. Вот примеры файловых систем, на
#которых shred не эффективен или не дает гарантии эффективности во всех
#режимах файловой системы:
#* log-structured or journaled file systems, such as those supplied with
#AIX and Solaris (and JFS, ReiserFS, XFS, Ext3, etc.)
#* file systems that write redundant data and carry on even if some writes
#fail, such as RAID-based file systems
#* file systems that make snapshots, such as Network Appliance's NFS server
#* file systems that cache in temporary locations, such as NFS
#version 3 clients
#* compressed file systems
#In the case of ext3 file systems, the above disclaimer applies
#(and shred is thus of limited effectiveness) only in data=journal mode,
#which journals file data in addition to just metadata. In both the
#data=ordered (default) and data=writeback modes, shred works as usual.
#Ext3 journaling modes can be changed by adding the data=something option
#to the mount options for a particular file system in the /etc/fstab file,
#as documented in the mount man page (man mount).
#Конец выдержки
# Уничтоженный таким образом файл, не сможет быть восстановлен обычными методами.
# Однако...
#+ эта метода вероятно НЕ сможет противостоять аналитическим службам
#+ из СООТВЕТСТВУЮЩИХ ОРГАНОВ
# Tom Vier разработал пакет "wipe", который более надежно стирает файлы
#+ чем этот простой сценарий.
# http://www.ibiblio.org/pub/Linux/utils/file/wipe-2.0.0.tar.bz2
# Для более глубоко изучения проблемы надежного удаления файлов,
#+ рекомендую обратиться к статье Питера Гутмана (Peter Gutmann),
#+ "Secure Deletion of Data From Magnetic and Solid-State Memory".
# http://www.cs.auckland.ac.nz/~pgut001/pubs/secure_del.html
# Также рекомендуем обратиться к моей статье за дополнительной информацией.
# http://hellknights.void.ru/articles/0x48k-Cleaners.htm
BLOCKSIZE=1 # операции ввода/вывода в/из /dev/urandom требуют указания размера блока,
#+ иначе вы не получите желаемого результата.
E_BADARGS=70
E_NOT_FOUND=71
E_CHANGED_MIND=72
val=( "\x55" "\xAA" "\x92" "\x49" "\x24" "\x00" "\x11" "\x22" "\x33"
"\x44" "\x55" "\x66" "\x77" "\x88" "\x99" "\xAA" "\xBB" "\xCC"
"\xDD" "\xEE" "\xFF" "\x55" "\xAA" "\x92" "\x00" "\x49" "\x24")
RANDOM=$$ # Инициализация генератора случайных чисел числом PID процесса-сценария.
PIPS=256 # Значения от 0 до 256
#echo "${#val}" #Длинна массива
#echo "${#val[*]}" #Количество элементов массива
#echo -e "${val[@]}" #Вывод массива
hexcvt ()
{
BASE=16
if [ -z "$1" ]
then
echo 0
return # "Return" 0, если функции не был передан аргумент.
fi
echo ""$1" "$BASE" o p" | dc
# "o" устанавливает основание системы счисления для вывода.
# "p" выводит число, находящееся на вершине стека.
# См. 'man dc'.
return
}
random_fill()
{
if [ $gen="rnd" ] # rnd, иначе /dev/urandom по-умолчанию
then
for ((j=$flength; j > 0 ; j--))
do
let "die1 = RANDOM % $PIPS"
die1=`hexcvt $die1`
die1=`echo "\x""$die1"`
echo -ne $die1 >> $file
done
else
dd if=/dev/urandom of=$file bs=$BLOCKSIZE count=$flength
fi
}
usage ()
{
echo -e "Порядок использования: `basename $0` <filename> <visr|bs|pg> <rnd|dev>"
echo -e "\tАлгоритмы:"
echo -e "\t visr - VISR"
echo -e "\t bs - Брюса Шнайера"
echo -e "\t pg - Питера Гутмана"
echo -e "\tГенераторы псевдослучайных последовательностей:"
echo -e "\t rnd - \$RANDOM (быстро, предсказуемей, по-умолчанию)"
echo -e "\t dev - /dev/urandom (медленней, надёжней)"
exit $E_BADARGS
}
clear
echo -en '\E[34;40m'"\033[1m${hell[@]}\033[0m"
if [ -z "$3" ] # Имя файла, генератор и алгоритм не указан.
then
usage
fi
file=$1
alg=$2
gen=$3
if [ ! -e "$file" ]
then
echo "Файл \"$file\" не найден."
exit $E_NOT_FOUND
fi
echo; echo -ne "Вы уверены в том, что желаете \033[1mуничтожить\033[0m \"$file\" по алгоритму \"$2\" (y/n)? "
read answer
case "$answer" in
[nN]) echo "Передумали? Операция отменена."
exit $E_CHANGED_MIND
;;
*) echo -e "\033[1mУничтожается\033[0m файл \"$file\".";;
esac
stime=$(date +%H%M%S%N)
echo "Запущен в $(date +%H:%M:%S.%N)"
flength=$(ls -l "$file" | awk '{print $5}') # Поле с номером 5 - это длина файла.
cat /dev/null > $file # Переходим в начало файла
echo
case "$alg" in
visr | VISR) #Затираем по алгоритму VISR
pass_count=0
for i in 1 2 3
do
let "pass_count += 1"
echo "Проход $pass_count"
dd if=/dev/zero of=$file bs=$BLOCKSIZE count=$flength
sync
cat /dev/null > $file # Переходим в начало файла
let "pass_count += 1"
echo "Проход $pass_count"
for ((j=$flength; j > 0; j--))
do
echo -ne "\xFF" >> $file
done
sync
cat /dev/null > $file # Переходим в начало файла
done
let "pass_count += 1"
echo "Проход $pass_count"
for ((j=$flength; j > 0; j--))
do
echo -ne "\xAA" >> $file
done
sync
;;
bs | BS) #Затираем по алгоритму Брюса Шнайера
pass_count=1
echo "Проход $pass_count"
for ((i=$flength; i > 0; i--))
do
echo -ne "\xFF" >> $file
done
sync
cat /dev/null > $file # Переходим в начало файла
let "pass_count += 1"
echo "Проход $pass_count"
dd if=/dev/zero of=$file bs=$BLOCKSIZE count=$flength
sync
cat /dev/null > $file # Переходим в начало файла
for i in 3 4 5 6 7
do
let "pass_count += 1"
echo "Проход $pass_count"
random_fill
sync
cat /dev/null > $file # Переходим в начало файла
done;;
pg | PG) #Затираем по алгоритму Питера Гутмана
pass_count=0
for i in 1 2 3 4
do
let "pass_count += 1"
echo "Проход $pass_count"
random_fill
sync
cat /dev/null > $file # Переходим в начало файла
done
for ((i=0; i < ${#val[*]} ; i++))
do
let "pass_count += 1"
echo "Проход $pass_count"
for ((j=$flength; j > 0 ; j--))
do
echo -ne "${val[i]}" >> $file
done
sync
cat /dev/null > $file # Переходим в начало файла
done
for i in 32 33 34 35
do
let "pass_count += 1"
echo "Проход $pass_count"
random_fill
sync
cat /dev/null > $file # Переходим в начало файла
done;;
*) #Для некорректного ввода
echo "Алгоритм был задан некорректно!"
usage
esac
rm -f $file # Наконец удалить изрядно "подпорченный" файл.
sync # Вытолкнуть буферы в последний раз.
let "stime=$(date +%H%M%S%N)-stime"
echo $stime
echo "Остановлен в $(date +%H:%M:%S.%N)"
echo -e "Файл \"$file\" \033[1mуничтожен\033[0m."; echo
echo -e "\a"
exit 0
__________________
..когда же кто-нибудь выпустит MD5(Unix) брутер на GPU.... жду....
Последний раз редактировалось ShadOS; 13.02.2007 в 13:41..
|
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|