ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Безопасность и Уязвимости > Безопасность > Анонимность
   
 
 
Опции темы Поиск в этой теме Опции просмотра

Безопасное удаление файлов
  #1  
Старый 13.02.2007, 13:37
Аватар для ShadOS
ShadOS
ы
Регистрация: 11.02.2007
Сообщений: 750
Провел на форуме:
1347723

Репутация: 1477


Отправить сообщение для ShadOS с помощью ICQ
По умолчанию Безопасное удаление файлов

Вот от нечего делать наколбасил скрипт на 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..
 
Ответить с цитированием
 



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обзор софта: Шифрование, Стеганография, Безопасное удаление данных D=P=CH= MOD= Безопасность 12 02.05.2010 19:38
восстановление данных и безвозвратное удаление файлов troyan Болталка 4 22.11.2007 12:04
Ошибки Windows dinar_007 Windows 19 01.07.2007 13:32
Окончательное удаление файлов podkashey Soft - Windows 9 29.01.2007 16:24
Пароль в CPanel ufo44 Уязвимости 11 07.12.2006 00:33



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ